1 #include <stdio.h>
2 #include <string.h>
3 #include <errno.h>
4 #include <sys/socket.h>
5 #include <resolv.h>
6 #include <stdlib.h>
7 #include <netinet/in.h>
8 #include <arpa/inet.h>
9 #include <unistd.h>
10 #define MAXBUF 10
11 int main(int argc, char **argv)
- 12 {
| 13 int sockfd, ret;
| 14 struct sockaddr_in dest, mine;
| 15 char buffer[MAXBUF + 1];
- 16 if (argc != 5) {
2 17 printf("参数格式错误!正确用法如下:\n\t\t%s 对方IP 地址 对方端口 本机IP 地址 本机端口\n\t比如:\t%s 127.0.0.1 82 0\n此程序用来以本机固定的端口从某个 IP 地址的服务器某个端口接收最多MAXBUF 个字节的消息",argv[0], argv[0]);
2 18 exit(0);
2 19 }
| 20 /* 创建一个 socket 用于 tcp 通信 */
| 21 sockfd = socket(AF_INET, SOCK_STREAM, 0);
| 22 /* 初始化服务器端(对方)的地址和端口信息 */
| 23 bzero(&dest, sizeof(dest));
| 24 dest.sin_family = AF_INET;
| 25 dest.sin_port = htons(atoi(argv[2]));
| 26 inet_aton(argv[1], (struct in_addr *) &dest.sin_addr.s_addr);
| 27 /* 初始化自己的地址和端口信息 */
| 28 bzero(&mine, sizeof(mine));
| 29 mine.sin_family = AF_INET;
| 30 mine.sin_port = htons(atoi(argv[4]));
| 31 inet_aton(argv[3], (struct in_addr *) &mine.sin_addr.s_addr);
| 32 /* 把自己的 IP 地址信息和端口与 socket 绑定 */
| 33 bind(sockfd, (struct sockaddr *) &mine, sizeof(struct sockaddr));
| 34 /* 连接服务器 */
| 35 connect(sockfd, (struct sockaddr *) &dest, sizeof(dest));
| 36 /* 接收对方发过来的消息,每次最多接收 MAXBUF 个字节,直到把对方发过来的所有消息接收完毕为止 */
- 37 do {
2 38 bzero(buffer, MAXBUF + 1);
2 39 ret = recv(sockfd, buffer, MAXBUF, 0);
2 40 printf("读到%d个字节,它们是:'%s'\n", ret, buffer);
2 41 }while(ret==MAXBUF);
| 42 /* 关闭连接 */
| 43 close(sockfd);
| 44 return 0;
| 45 }
46