- /*******************
- 服务器
- *******************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <strings.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #define SERV_PORT 8000
- int main(int argc, char *argv[])
- {
- if(argc != 2)
- {
- printf("Please input one IP!!\n");
- exit(-1);
- }
- int n_read;
- char buffer[1024]; //缓冲
- struct sockaddr_in client; //存放客户端信息
- int len = sizeof(client); //存放客户端的类型长度
- struct sockaddr_in servaddr; //服务器端
- bzero(&servaddr,sizeof(servaddr)); //清零
- servaddr.sin_family = AF_INET; //服务器端遵循IPV4
- servaddr.sin_addr.s_addr = inet_addr(argv[1]); //传入服务器端地址,inet_addr,将字符串转换成地址
- servaddr.sin_port = htons(SERV_PORT); //端口号,宏定义为8000
- int sock = socket(AF_INET,SOCK_STREAM,0); //服务器的套接字
- if(sock == -1)
- {
- perror("sock ");
- exit(-1);
- }
- if((bind(sock,(struct sockaddr *)&servaddr,sizeof(servaddr))) == -1) //将套接字与服务器信息绑在一起
- {
- perror("bind ");
- exit(-1);
- }
- if((listen(sock,5)) == -1) //设置监听器
- {
- perror("listen ");
- exit(-1);
- }
- int fd = accept(sock,(struct sockaddr *)&client,&len); //打开接收端,将客户端信息传入client中,len会得到客户端地址长度
- if(fd == -1)
- {
- perror("accept ");
- exit(-1);
- }
- printf("client address:%s\n",inet_ntoa(client.sin_addr.s_addr)); //打印客户端地址
- printf("client port:%d\n",len); //打印客户端地址长度
- while(1)
- {
- memset(buffer,0,sizeof(buffer));
- n_read = read(fd,buffer,sizeof(buffer)); //读取客户端发送的信息
- if(n_read == -1)
- {
- perror("read ");
- exit(-1);
- }
- printf("information : %s\n",buffer); //打印信息
- }
- return 0;
- }
- /*******************
- 客户端
- *******************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <strings.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #define SERV_PORT 8000
- int main(int argc, char *argv[])
- {
- if(argc != 2)
- {
- printf("Please input server IP!\n");
- exit(-1);
- }
- int con;
- char buffer[1024];
- int sock = socket(AF_INET,SOCK_STREAM,0); //定义客户端的套接字
- struct sockaddr_in server;
- bzero(&server,sizeof(server));
- server.sin_family = AF_INET; //链接服务器遵循IPV4
- server.sin_addr.s_addr = inet_addr(argv[1]); //需要链接的服务器地址
- server.sin_port = htons(SERV_PORT);
- if(connect(sock,(struct sockaddr *)&server,sizeof(server)) == -1) //将客户端与服务器链接链接
- {
- perror("connect ");
- exit(-1);
- }
- while(1)
- {
- memset(buffer,0,sizeof(buffer));
- printf("Please input infornamtion:\n");
- scanf("%s",buffer);
- write(sock,buffer,sizeof(buffer)); //向服务器发送数据
- }
- return 0;
- }