client.c代码如下:
View Code
View Code
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types.h> #include <unistd.h> #define BUFLEN 10 int main(int argc, char **argv) { int sockfd; int port = 4567; struct sockaddr_in ser_addr; int len; char buf[BUFLEN]; /*建立socket*/ if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){ printf("server socket creation error\n"); return -1; }else printf("server socket success\n"); ser_addr.sin_port = htons(port); ser_addr.sin_family = AF_INET; if (inet_aton(argv[1], (struct in_addr *)&ser_addr.sin_addr.s_addr) == 0) { printf("server error\n"); return -1; } /*开始连接服务器*/ if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr)) == -1){ perror("connect"); exit(errno); }else printf("conncet success!\n"); while(1) { /******接收消息*******/ bzero(buf,BUFLEN); len = recv(sockfd,buf,BUFLEN,0); if(len > 0) printf("服务器发来的消息是:%s,共有字节数是: %d\n",buf,len-1); else printf("接受消息失败!\n"); /******发送消息*******/ bzero(buf,BUFLEN); printf("请输入发送给对方的消息:"); /*fgets函数:从流中读取BUFLEN-1个字符*/ fgets(buf,BUFLEN,stdin); len = send(sockfd,buf,strlen(buf),0); if(len > 0) printf("消息发送成功,本次共发送的字节数是:%d\n",len); else{ printf("聊天终止!\n"); break; } } /*关闭连接*/ close(sockfd); return 0; }
server.c代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types.h> #include <unistd.h> #define BUFLEN 10 int main(int argc,char **argv) { int ser_sockfd,cli_sockfd; int port = 4567; int len; // struct sockaddr_in ser_addr; struct sockaddr_in cli_addr; char buf[BUFLEN]; /*建立socket*/ if ((ser_sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){ printf("server socket creation error\n"); return -1; }else printf("socket create success!\n"); /*设置服务器ip*/ bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family = AF_INET; /*设置服务器端口*/ ser_addr.sin_port=htons(port); if (argv[1]) ser_addr.sin_addr.s_addr = inet_addr(argv[1]); else ser_addr.sin_addr.s_addr = INADDR_ANY; /*把地址和端口帮定到套接字上*/ if (bind(ser_sockfd,(struct sockaddr*) &ser_addr,sizeof(struct sockaddr_in)) == -1){ printf("server binding error\n"); return -1; }else printf("bind success!\n"); /*侦听本地端口*/ if (listen(ser_sockfd,5) == -1){ printf("server listening error\n"); return -1; }else printf("the server is listening!\n"); while(1){ printf("*****************聊天开始***************\n"); if ((cli_sockfd = accept(ser_sockfd,(struct sockaddr*)&cli_addr,&len)) == -1){ printf("server acception error\n"); return -1; }else printf("正在与您聊天的客户端是:%s: %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port)); while(1){ /******发送消息*******/ bzero(buf,BUFLEN); /*fgets函数:从流中读取BUFLEN-1个字符*/ fgets(buf,BUFLEN,stdin); len = send(cli_sockfd,buf,strlen(buf),0); if(len > 0) printf("消息发送成功,本次共发送的字节数是:%d\n",len); else{ printf("消息发送失败!\n"); break; } /******接收消息*******/ bzero(buf,BUFLEN); len = recv(cli_sockfd,buf,BUFLEN,0); if(len > 0) printf("客户端发来的信息是:%s,共有字节数是: %d\n",buf,len); else{ printf("聊天终止!\n"); break; } } /*关闭聊天的套接字*/ close(cli_sockfd); } /*关闭服务器的套接字*/ close(ser_sockfd); return 0; }