Linux网络编程实验二
要求:
- 服务端返回客户端发送的两个整数之和。
- 服务器提供并发服务
建立TCP连接的基本步骤:
参考:https://blog.csdn.net/QQ1402369668/article/details/86090092
服务端:
- 创建监听socket套接字,套接字就相当于用于通信的工具,比如要打电话给别人,首先得获得一个手机,在代码中体现为:
int listenSocket=socket(AF_INET,SOCK_STREAM,0);
//AF_INET :表示IPv4域
//SOCK_STREAM:表示使用TCP协议
//0 :默认参数
openSUSE 用户手册中对socket()的描述:
- 创建并初始化地址结构体,包括获得本机的IP地址和初始化指定的端口号
struct sockaddr_in addrSrc,addrClient;
addrSrc.sin_family=AF_INET;
addrSrc.sin_port=htons(6666);//服务端的监听端口
addrSrc.sin_addr.s_addr=INADDR_ANY;//转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP
- 绑定地址,监听端口
//绑定
bind(listenSocket,(struct sockaddr*)&addrSrc,sizeof(struct sockaddr_in));
//监听
listen(listenSocket,5);//5 表示最多允许和5个客户端建立TCP连接
此时服务端的监听套接字准备完毕,下一步是在该监听套接字上监听客户端的请求,在代码中体现为:在死循环中调用accept()函数,若监听到了一个客户端的连接请求,accept()函数便会返回一个新的套接字描述符,此后便用这个连接套接字与客户端进行通信。
由于要求使用并发处理,则在服务端监听到了一个请求后便会创建一个子进程与客户端通信,父进程专门用于监听TCP连接请求,子进程专门用于与客户端交互,比如进行计算等操作。
服务端完整代码:
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/ioctl.h>
#include<string.h>
int main()
{
//创建一个socket
int listenSocket=socket(AF_INET,SOCK_STREAM,0);
pid_t childpid;
//配置ip port 协议
struct sockaddr_in addrSrc,addrClient;
addrSrc.sin_family=AF_INET;
addrSrc.sin_port=htons(6666);
addrSrc.sin_addr.s_addr=INADDR_ANY;
//绑定
bind(listenSocket,(struct sockaddr*)&addrSrc,sizeof(struct sockaddr_in));
//监听
listen(listenSocket,5);
int connfd=0;
int len=sizeof(struct sockaddr_in);
for