#define MYADDR "192.168.1.102"
//服务器
int main() { int ret = 0; int socketfd = 0; //局部变量保存在栈空间,而栈空间是脏的==》里面还是保存的是上一次这个区域里面保存的值; int clientfd = 0; struct sockaddr_in sock_server = {0}; //变量类型保存在netinet/in.h里面的; struct sockaddr_in sock_client = {0}; //保存连接的客户端那边的信息; socklen_t len = sizeof(struct sockaddr); //第一步:创建套接字; socketfd = socket(AF_INET,SOCK_STREAM,0); if(socketfd == -1) { perror("socket"); // printf("socket error!\n"); return -1; } printf("socket success...\n"); //确保前面的代码是运行正确的; //第二步:给套接字绑定必要的信息; sock_server.sin_family = AF_INET; //给服务程序绑定地址族; sock_server.sin_port = htons(MYPORT); //给服务器程序设定个端口号; sock_server.sin_addr.s_addr = inet_addr(MYADDR);//给服务程序绑定IP地址; ret = bind(socketfd,(struct sockaddr *)&sock_server,sizeof(struct sockaddr)); if(ret == -1) { perror("bind"); return -1; } printf("bind success..\n"); ret = listen(socketfd,10); if(ret == -1) { perror("listen"); return -1; } printf("listen success...\n"); clientfd = accept(socketfd,(struct sockaddr *)&sock_client,&len); if(clientfd == -1) { perror("accept"); return -1; } printf("accept success...clinet fd = %d\n",clientfd); char recvbuff[20] = {0}; int recvcnt = 0; printf("sizeof(struct sockaddr) = %d\n",sizeof(struct sockaddr)); printf("sizeof(struct sockaddr_in) = %d\n",sizeof(struct sockaddr_in)); while(1) { // printf("strlen(recvbuff) = %d\n",strlen(recvbuff)); bzero(recvbuff,sizeof(recvbuff)); // recvcnt = recv(clientfd,recvbuff,sizeof(recvbuff),0); recvcnt = read(clientfd,recvbuff,sizeof(recvbuff)); if(recvcnt == -1) { perror("recv"); return -1; } else { printf("Recv from Client %d bytes,data:%s\n",recvcnt,recvbuff); } if(strcmp(recvbuff,"end") == 0) { close(clientfd); close(socketfd); break; } }
return 0; }
//服务器
int main() { int socketfd = 0; int ret = 0; struct sockaddr_in sock_server = {0}; socketfd = socket(AF_INET,SOCK_STREAM,0); if(-1 == socketfd) { perror("socket"); return -1; } printf("socket success...\n"); //用sock_server提醒你们这边连接的是服务器端的IP地址和端口号; sock_server.sin_family = AF_INET; sock_server.sin_port = htons(MYPORT); sock_server.sin_addr.s_addr = inet_addr(MYADDR); ret = connect(socketfd,(struct sockaddr *)&sock_server,sizeof(struct sockaddr)); if(ret == -1) { perror("connect"); return -1; } char sendbuff[20] = {0}; int sendcnt = 0; while(1) { //第一步:提示客户输入要发送的数据; printf("Please input a string:\n"); scanf("%s",sendbuff); //第二步:调用send向套接字发送数据; // sendcnt = send(socketfd,sendbuff,strlen(sendbuff),0); sendcnt = write(socketfd,sendbuff,strlen(sendbuff)); if(sendcnt == -1) { perror("send"); return -1; } else { printf("Send to Server %d bytes,data:%s\n",sendcnt,sendbuff); } //第三步:判断发送的数据是否是end,如果是,就结束; if(strcmp(sendbuff,"end") == 0) { close(socketfd); break; } } return 0; }
