1. /*******************
2. 服务器
3. *******************/
4.
5. #include <stdio.h>
6. #include <stdlib.h>
7. #include <string.h>
8. #include <strings.h>
9.
10. #include <sys/types.h>
11. #include <sys/socket.h>
12. #include <netinet/in.h>
13.
14. #define SERV_PORT 8000
15.
16. int main(int argc, char *argv[])
17. {
18. if(argc != 2)
19. {
20. printf("Please input one IP!!\n");
21. exit(-1);
22. }
23. int n_read;
24. char buffer[1024]; //缓冲
25. struct sockaddr_in client; //存放客户端信息
26. int len = sizeof(client); //存放客户端的类型长度
27. struct sockaddr_in servaddr; //服务器端
28. bzero(&servaddr,sizeof(servaddr)); //清零
29. servaddr.sin_family = AF_INET; //服务器端遵循IPV4
30. servaddr.sin_addr.s_addr = inet_addr(argv[1]); //传入服务器端地址,inet_addr,将字符串转换成地址
31. servaddr.sin_port = htons(SERV_PORT); //端口号,宏定义为8000
32.
33. int sock = socket(AF_INET,SOCK_STREAM,0); //服务器的套接字
34. if(sock == -1)
35. {
36. perror("sock ");
37. exit(-1);
38. }
39.
40. if((bind(sock,(struct sockaddr *)&servaddr,sizeof(servaddr))) == -1) //将套接字与服务器信息绑在一起
41. {
42. perror("bind ");
43. exit(-1);
44. }
45.
46. if((listen(sock,5)) == -1) //设置监听器
47. {
48. perror("listen ");
49. exit(-1);
50. }
51.
52.
53. int fd = accept(sock,(struct sockaddr *)&client,&len); //打开接收端,将客户端信息传入client中,len会得到客户端地址长度
54. if(fd == -1)
55. {
56. perror("accept ");
57. exit(-1);
58. }
59. printf("client address:%s\n",inet_ntoa(client.sin_addr.s_addr)); //打印客户端地址
60. printf("client port:%d\n",len); //打印客户端地址长度
61. while(1)
62. {
63. memset(buffer,0,sizeof(buffer));
64. n_read = read(fd,buffer,sizeof(buffer)); //读取客户端发送的信息
65. if(n_read == -1)
66. {
67. perror("read ");
68. exit(-1);
69. }
70. printf("information : %s\n",buffer); //打印信息
71. }
72.
73. return 0;
74. }
[cpp] view plain copy
1. /*******************
2. 客户端
3. *******************/
4.
5. #include <stdio.h>
6. #include <stdlib.h>
7. #include <string.h>
8. #include <strings.h>
9.
10. #include <sys/types.h>
11. #include <sys/socket.h>
12. #include <netinet/in.h>
13.
14. #define SERV_PORT 8000
15.
16. int main(int argc, char *argv[])
17. {
18. if(argc != 2)
19. {
20. printf("Please input server IP!\n");
21. exit(-1);
22. }
23.
24. int con;
25. char buffer[1024];
26.
27. int sock = socket(AF_INET,SOCK_STREAM,0); //定义客户端的套接字
28.
29. struct sockaddr_in server;
30. bzero(&server,sizeof(server));
31. server.sin_family = AF_INET; //链接服务器遵循IPV4
32. server.sin_addr.s_addr = inet_addr(argv[1]); //需要链接的服务器地址
33. server.sin_port = htons(SERV_PORT);
34.
35. if(connect(sock,(struct sockaddr *)&server,sizeof(server)) == -1) //将客户端与服务器链接链接
36. {
37. perror("connect ");
38. exit(-1);
39. }
40.
41. while(1)
42. {
43. memset(buffer,0,sizeof(buffer));
44. printf("Please input infornamtion:\n");
45. scanf("%s",buffer);
46. write(sock,buffer,sizeof(buffer)); //向服务器发送数据
47. }
48. return 0;
49. }