文档介绍:LINUX C编程
整理课件
套接字与网络编程
TCP/IP协议简介
Socket编程
整理课件
专门用
于为用
户提供
应用服
务(ftp,
telnet,
Smtp..)
TCP/IP参考模型
应用层
twork To Host Short”,网络字节顺序->主机地址
ntohl:” Network To Host long”,网络字节顺序->主机地址(长型)
整理课件
获取服务器和客户端主机信息
#include <>
Struct hostent * gethostbyname(const char * hostname);//将机器名()转换为一个hostent的结构指针,在这个结构里
保存域名的地址信息。
Struct hostent * gethostbyaddr(const char * addr,int len,int type);
将一个32位的IP地址(C0A80001)转换为一个hostent的结构指针,
在这个结构里保存域名的地址信息。
Ip地址和域名的转换
Struct hostent{
char * h_name;//主机的正式名字(域名)
char * h_aliases;//主机的别名
int h_addrtype;//主机的地址类型(如AF_INET)
int h_lengh;//主机的地址长度,对于IPV4为说是4个字节其32位
char ** h_addr_list;//主机的IP地址列表
}
#define h_addr h_addr_list[0]//主机的第一个IP地址
整理课件
获取服务器和客户端主机信息
#include <netinet/>
#include <arpa/>
Int inet_aton(const char * cp,struct in_addr *inp)
char * inet_ntoa(struct in_addr in)
//网络上的IP地址都是由“点分十进制”(“”)方式表示,在struct in_addr结构中采用的是32位的IP地址,“”实际表示为32位的IP地址应该为C0A80100。
a代表”ascii”,n代表”network”。
Inet_aton(),并存储在inp指针所指向的地址里;
Inet_ntoa()将32位的IP地址转换为””的字符串格式。
字符串的IP地址与32位的IP地址的转换
整理课件
获取服务器和客户端主机信息
字符串的IP地址与32位的IP地址的转换
整理课件
获取服务器和客户端主机信息
#include <>
struct hostent * gethostbyname(const char * hostname);域名---IP转换
struct hostent * gethostbyaddr(const char * hostname);IP—域名转换
获取主机信息的函数
整理课件
Socket 编程
基于TCP
即面向连接的通信数据流
整理课件
#include <sys/>
#include <sys/>
int socket(int domain,int type,int protocol)
函数说明:创建一个套接字描述符,如果失败返回 -1.
domain为地址族AF_XXX,type为套接字类型,SOCK_STREAM(TCP),SOCK_DGRAM (UDP),SOCK_RAW(IP、ICMP);
protocol 指定协议 0为自动选择 。
(第一步)创建套接字以获得文件描述符
Socket 编程(采用客户端/服务器端模工作)
整理课件
#include <sys/>
#include <sys/>
int bind(int sockfd,struct sockaddr* my_addr,int addrlen);
函数说明:成功返回0,如果失败返回 -1
sockfd:由socket()调用返回的文件描述符
myaddr: 指向sockaddr的指针,由于系统兼容性问题,一般
使用struct sockaddr_in代替。
addrlen:sockaddr结构的长度
Socket 编程步骤
(第二步)建立连接,将套接字与本地计算机的地址绑定在一起
整理课件
Socket 编程
#include <strin