定义
int s_fd;//服务器套接字描述符int c_fd;//客户端套接字描述符int clen=sizeof(struct sockaddr_in);//地址结构体的大小struct sockaddr_in s_addr;//服务端socket地址结构体memset(&s_addr,0,clen);struct sockaddr_in c_addr;//客户端socket地址结构体memset(&c_addr,0,clen);char port[12] = "8088" ;//端口号char ipAddress[32] = "172.20.10.14" ;//ip地址
socket创建
s_fd = socket (AF_INET,SOCK_STREAM,0);
if(s_fd == -1)
{perror("socket");exit(-1);
}
写入服务端的ip地址和端口号
s_addr.sin_family=AF_INET;//将套接字地址结构体sin_family成员设置为AF_INET,表示这是一个IPv4地址s_addr.sin_port=htons(atoi(port));//将端口号设置为从port变量中解析出来的值inet_aton(ipAddress,&s_addr.sin_addr);//将IP地址设置为ipAddress变量解析得到的值,并存储在sin_addr成员中
将信息绑定到到socket
bind(s_fd,(struct sockaddr *)&s_addr,&clen);
listen开启监听
listen(s_fd,10);
等待accept连接
c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);
读取数据,发送数据,打印客户端ip地址
//获取客户端ip地址和端口号
char client_ip[INET_ADDRSTRLEN];//存放ip地址的缓存
inet_ntop(AF_INET, &(c_addr.sin_addr), client_ip, INET_ADDRSTRLEN);//将一个网络字节序的二进制IP地址转换为可读的字符串形式int client_port = ntohs(c_addr.sin_port);//将16位整数由网络字节顺序转换为主机字节顺序printf("Client IP Address: %s\n", client_ip);
printf("Client Port: %d\n", client_port);//读取数据
char command[256] = {'\0'};
memset(command,'\0',sizeof(command));
n_read = read(c_fd,command,sizeof(command));//发送数据
write(c_fd,command,sizeof(command));
memset(command,'\0',sizeof(command));