2-3-4-5 获取时间的客户端例子 TCP相关

来源:互联网 发布:数控螺纹g92螺纹编程 编辑:程序博客网 时间:2024/06/05 09:38

1. OSI7层模型 vs 四层模型


2. bzero vs memset


bzero:#include <stringh.h>,不是标准函数,在ANSI中没有定义。

memset:考虑兼容性等问题的时候还是使用memset吧。


3. TCP编程模型


时间服务器的源码如下:

TCP的连接方式之前在tcpip网路编程中一致,尹圣雨的书籍。

设备端连接上服务器后,将服务器的时间发送给客户端。

#include "socket_includes.h"int main(int argc, char *argv[]){int listenfd, sockfd, opt = 1;struct sockaddr_in server, client;char buf[200];socklen_t len;int timep;int ret;listenfd = socket(AF_INET, SOCK_STREAM, 0);  if(listenfd < 0){perror("Create socket fail.");return -1;  }if((ret = setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) < 0){  perror("Error, set socket reuse addr failed");  return -1;  }bzero(&server, sizeof(server));  server.sin_family = AF_INET;  server.sin_port   = htons(8888);  server.sin_addr.s_addr  = htonl(INADDR_ANY);len = sizeof(struct sockaddr);  if(bind(listenfd, (struct sockaddr *)&server, len)<0){perror("bind error.");      return -1;  }listen(listenfd, MAX_LISTEN_QUE);while(1){sockfd = accept(listenfd, (struct sockaddr *)&client, &len);  if(sockfd < 0){perror("accept error.");return -1;  }  timep = time(NULL);snprintf(buf, sizeof(buf), "%s", ctime(&timep));write(sockfd, buf, strlen(buf));printf("Bytes:%d\n", strlen(buf));printf("sockfd=%d\n", sockfd);close(sockfd);}return 0;}

4. 三次握手、四次挥手流程

之前的课程中有提到过,这边不再描述,尹圣雨的tcpip编程。


5.网络字节序的转换问题

6. 进程传递到内核的函数:bind、connect、sendto

内核传递到进程的函数:accept, recvfrom,getsockname, getpeername


7. connect经常碰到的错误:

a. 硬错:端口号错误,服务器进程未开启,收到RST,立刻返回ECONNREFUSED;

b. 软错:IP不可达,协议ICMP,比如no route to host,通常是发送arp请求无响应。


8. accept中的最大连接数

对应两个队列:一个是已完成的连接队列;另一个是未完成的连接队列。

最大数指的就是已完成的连接队列最大数。


0 0
原创粉丝点击