TCP编程的服务器端一般步骤是 1、 创建一个socket,用函数socket(); 2、 设置socket属性,用函数setsockopt(); * 可选 3、 绑定IP地址、端口等信息到socket上,用函数bind(); 4、 开启监听,用函数listen(); 5、 接收客户端上来的连接,用函数accept(); 6、 收发数据,用函数send()和recv(),者read()和write(); 7、 关闭网络连接; 8、 关闭监听; TCP编程的客户端一般步骤是: 1、 创建一个socket,用函数socket(); 2、 设置socket属性,用函数setsockopt();* 可选 3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选 4、 设置要连接的对方的IP地址和端口等属性; 5、 连接服务器,用函数connect(); 6、 收发数据,用函数send()和recv(),或者read()和write(); 7、 关闭网络连接; UDP编程的服务器端一般步骤是: 1、 创建一个socket,用函数socket(); 2、 设置socket属性,用函数setsockopt();* 可选 3、 绑定IP地址、端口等信息到socket上,用函数bind() 4、 循环接收数据,用函数recvfrom(); 5、 关闭网络连接; UDP编程的客户端一般步骤是: 1、 创建一个socket,用函数socket(); 2、 设置socket属性,用函数setsockopt();* 可选 3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选 4、 设置对方的IP地址和端口等属性; 5、 发送数据,用函数sendto(); 6、 关闭网络连接; 常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使用帮助 telnet telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的. 比如我们的服务器程序在监听8888端口,我们可以用telnet localhost 8888来查看服务端的状况 数据结构 1、地址结构 struct sockaddr_in { short int sin_family; /* 地址族 一般为AF-INET */ unsigned short int sin_port; /* 端口号 */ struct in_addr sin_addr; /* IP地址 */ unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 使用memset()或bzero()来填充*/ }; struct sockaddr { unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data[14]; /* 14 字节的协议地址 */ }; 2、DNS结构 struct hostent { char *h_name; /* 主机的官方域名 */ char **h_aliases; /* 一个以NULL结尾的主机别名数组 */ int h_addrtype; /* 返回的地址类型,在Internet环境下为AF-INET */ int h_length; /*地址的字节长度 */ char **h_addr_list; /* 一个以0结尾的数组,包含该主机的所有地址*/ }; 操作函数 1、 socket: 创建socket 描述符 int socket(int domain, int type, int protocol); domain=AF_INET,socket的类型,type=SOCK_STREAM 或SOCK_DGRAM,分别表示TCP连接和UDP连接;protocol=0。 返回一个整型socket描述符。 2.bind: 将socket描述符与你本机上的一个端口相关联(仅用于服务器) int bind(int sockfd,struct sockaddr *my_addr, int addrlen); Sockfd是一个socket描述符 my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针; addrlen=sizeof(struct sockaddr)。 返回:成功=0;失败=-1,errno=错误号。 可以用下面的赋值自动获得本机IP地址和随机获取一个没有被占用的端口号: my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */ my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */ 3.Connect: 与远端服务器建立一个TCP连接 (用于客户端) int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); Sockfd是目的服务器的sockt描述符 serv_addr是包含目的机IP地址和端口号的指针。 返回:成功=0;失败=-1,errno=错误号。 4、Listen: 监听是否有服务请求 ,用于bind()后 int listen(int sockfd, int backlog); Sockfd是Socket系统调用返回的socket 描述符; backlog指定在请求队列中允许的最大请求数,缺省值为20。 返回:成功=0;失败=-1,errno=错误号。 |