思维导图
重打代码
#include<myhead.h>
#define SER_IP "192.168.122.150" //服务器ip
#define SER_PORT 8888 //服务器端口int main(int argc, const char *argv[])
{//1.创建用于连接的套接字int sfd=socket(AF_INET,SOCK_STREAM,0);if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//3//端口号快速重用int reuse =1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,\&reuse,sizeof(reuse))==-1){perror("setsockopt error");return -1;}printf("端口号快速重用成功\n");//2.给当前套接字绑定IP地址和端口号//2.1填充要绑定的地址信息结构体struct sockaddr_in sin;sin.sin_family= AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//2.2绑定端号口和ipif(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success %s %s %d\n",__FILE__,__func__,__LINE__);//3.将套接字设置成监听状态if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success %s %s %d\n",__FILE__,__func__,__LINE__);//4.阻塞等待客户端的链接请求 //4.1定义容器接受客户端的地址信息struct sockaddr_in cin; socklen_t socklen=sizeof(cin);int newfd=-1;//4.2接受客户端的链接newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("[%s:%d]发来链接请求 %s %s %d\n",\inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),\__FILE__,__func__,__LINE__);//5.跟客户端进行消息通信char buf[128]="";while(1){bzero(buf,sizeof(buf));//将数组清空//读取客户端发来的消息int res=recv(newfd,buf,sizeof(buf),0);if(res==0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),\ntohs(cin.sin_port),buf);strcat(buf,"已收到\n"); //给客户端发消息send(newfd,buf,sizeof(buf),0);printf("发送成功\n");}//6、关闭套接字close(newfd);close(sfd);return 0;
}
#include<myhead.h>
#define SER_IP "192.168.122.150" //服务器ip
#define CLI_IP "192.168.122.150" //客户器ip
#define SER_PORT 8888 //服务器端口
#define CLI_PORT 6666 //客户端口int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd=-1;cfd=socket(AF_INET,SOCK_STREAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//3//2.绑定(不填的系统自动绑定端口)//3.连接服务器//3.1填充服务器地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);//3.2连接if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4.收发数据char buf[128]="";while(1){//清空数组bzero(buf,sizeof(buf));printf("请输入>>>");// write(stdin,buf,sizeof(buf));//从终端输入数据fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';//发送给服务器send(cfd,buf,sizeof(buf),0);printf("发送成功\n");if(strcmp(buf,"quit")==0){break;}//接收服务器发来的消息recv(cfd,buf,sizeof(buf),0);printf("[%s:%d]:%s\n",SER_IP,SER_PORT,buf);}close(cfd);return 0;
}
机械臂