已经看过很多遍的网络编程相关内容,但一次偶然的面试总居然发现已经忘得七七八八甚至还不如刚出校门时,于是觉得不能再眼高手低了,
需要重新拿起书本复习复习,所以就有了下面的博文,希望我能坚持学习,坚持努力。
tcp连接的建立总的来说就是一个跟电话系统类似的套路:
对于服务器:
1. 建立一个socket用于通信(类似listenfd = socket(AF_INET, SOCK_STREAM, 0))
2. 绑定一个地址好让别人能找到你
类似:
struct sockaddr_in servaddr
servaddr.sin_family = AF_INET
servaddr.sin_addr.s_addr = htonl(INADDR_ANY)
servaddr.sin_port = htons(8888)
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr))
3. 监听,如同打开电话振铃,这叫被动打开
listen(listenfd, 10);
4. 等待连接
for(; ;)
{
connfd = accept(listenfd, NULL, NULL);
read();
write();
close(connfd);
}
对于客户端:
1. 建立套接字,类似于服务器,只是这个套接字是主动打开套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
2. 连接服务器
servaddr.sin_family = AF_INET;
servaddr.port = htons(8888);
inet_pton(AF_INET, serverIp, &servaddr.sin_addr);
connect(sockfd, (struct sockaddr_in)&servaddr, sizeof(servaddr));
write();
close(sockfd);
return 0;
建立和终止过程:
![tcp建立连接和关闭过程](https://img-blog.csdn.net/20160903181559614)