定义
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));