一个简单socket程序问题
就是客户端发送字符串服务端进行大小写转换,把结果显示出来,但显示结果有问题,没有转换成功,原样传回来了,显示客户端口也出现问题,端口号是8000,显示出来却是59363,请大家指教一下!谢谢!
waiting ...
client IP is 127.0.0.1, port is 59363
client is : Test String
receive from server: Test String
server.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <netdb.h>
4 #include <arpa/inet.h>
5 #include <unistd.h>
6 #include <sys/socket.h>
7 #include <ctype.h>
8
9 #define MAX_LINE 100
10
11 void my_fun(char * p)
12 {
13 if(p == NULL)
14 return;
15
16 for(; *p != '\0'; p ++)
17 if(*p >= 'A' && p <= 'Z')
18 *p = *p - 'A' + 'a';
19 }
20
21 int main(void)
22 {
23 struct sockaddr_in sin;
24 struct sockaddr_in cin;
25 int l_fd;
26 int c_fd;
27 socklen_t len;
28 char buf[MAX_LINE];
29 char addr_p[INET_ADDRSTRLEN];
30 int port = 8000;
31 int n;
32
33 bzero(&sin, sizeof(sin));
34 sin.sin_family = AF_INET;
35 sin.sin_addr.s_addr = INADDR_ANY;
36 sin.sin_port = htons(port);
37
38 l_fd = socket(AF_INET, SOCK_STREAM, 0);
39
40 bind(l_fd, (struct sockaddr *)&sin, sizeof(sin));
41
42 listen(l_fd,10);
43
44 printf("waiting ...\n");
45
46 while(1)
47 {
48 c_fd = accept(l_fd, (struct sockaddr *)&cin, &len);
49
50 n = read(c_fd, buf, MAX_LINE);
51
52 inet_ntop(AF_INET, &cin.sin_addr, addr_p, sizeof(addr_p));
53
54 printf("client IP is %s, port is %d\n", addr_p, ntohs(cin.sin_port));
55
56 printf("client is : %s\n", buf);
57
58 my_fun(buf);
59
60 write(c_fd, buf, n);
61
62 close(c_fd);
63
64 }
65
66 if(close(l_fd) == -1)
67 {
68 perror("fail to close");
69 exit(1);
70 }
71
72 return 0;
73
74 }
74,1 Bot
client.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <arpa/inet.h>
4 #include <unistd.h>
5 #include <sys/socket.h>
6
7 #define MAX_LINE 100
8
9 int main(int argc, char **argv)
10 {
11 struct sockaddr_in sin;
12 int sfd;
13 char buf[MAX_LINE];
14 int port = 8000;
15 char *str = "Test String";
16
17 if(argc > 1)
18 str = argv[1];
19
20 bzero(&sin, sizeof(sin));
21 sin.sin_family = AF_INET;
22 sin.sin_port = htons(port);
23 inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr);
24
25 sfd = socket(AF_INET, SOCK_STREAM, 0);
26
27 connect(sfd, (struct sockaddr_in *)&sin, sizeof(sin));
28
29 write(sfd, str, strlen(str) + 1);
30
31 read(sfd, buf, MAX_LINE);
32
33 printf("receive from server: %s\n", buf);
34
35 close(sfd);
36
37 return 0;
38
}
waiting ...
client IP is 127.0.0.1, port is 59363
client is : Test String
receive from server: Test String
server.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <netdb.h>
4 #include <arpa/inet.h>
5 #include <unistd.h>
6 #include <sys/socket.h>
7 #include <ctype.h>
8
9 #define MAX_LINE 100
10
11 void my_fun(char * p)
12 {
13 if(p == NULL)
14 return;
15
16 for(; *p != '\0'; p ++)
17 if(*p >= 'A' && p <= 'Z')
18 *p = *p - 'A' + 'a';
19 }
20
21 int main(void)
22 {
23 struct sockaddr_in sin;
24 struct sockaddr_in cin;
25 int l_fd;
26 int c_fd;
27 socklen_t len;
28 char buf[MAX_LINE];
29 char addr_p[INET_ADDRSTRLEN];
30 int port = 8000;
31 int n;
32
33 bzero(&sin, sizeof(sin));
34 sin.sin_family = AF_INET;
35 sin.sin_addr.s_addr = INADDR_ANY;
36 sin.sin_port = htons(port);
37
38 l_fd = socket(AF_INET, SOCK_STREAM, 0);
39
40 bind(l_fd, (struct sockaddr *)&sin, sizeof(sin));
41
42 listen(l_fd,10);
43
44 printf("waiting ...\n");
45
46 while(1)
47 {
48 c_fd = accept(l_fd, (struct sockaddr *)&cin, &len);
49
50 n = read(c_fd, buf, MAX_LINE);
51
52 inet_ntop(AF_INET, &cin.sin_addr, addr_p, sizeof(addr_p));
53
54 printf("client IP is %s, port is %d\n", addr_p, ntohs(cin.sin_port));
55
56 printf("client is : %s\n", buf);
57
58 my_fun(buf);
59
60 write(c_fd, buf, n);
61
62 close(c_fd);
63
64 }
65
66 if(close(l_fd) == -1)
67 {
68 perror("fail to close");
69 exit(1);
70 }
71
72 return 0;
73
74 }
74,1 Bot
client.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <arpa/inet.h>
4 #include <unistd.h>
5 #include <sys/socket.h>
6
7 #define MAX_LINE 100
8
9 int main(int argc, char **argv)
10 {
11 struct sockaddr_in sin;
12 int sfd;
13 char buf[MAX_LINE];
14 int port = 8000;
15 char *str = "Test String";
16
17 if(argc > 1)
18 str = argv[1];
19
20 bzero(&sin, sizeof(sin));
21 sin.sin_family = AF_INET;
22 sin.sin_port = htons(port);
23 inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr);
24
25 sfd = socket(AF_INET, SOCK_STREAM, 0);
26
27 connect(sfd, (struct sockaddr_in *)&sin, sizeof(sin));
28
29 write(sfd, str, strlen(str) + 1);
30
31 read(sfd, buf, MAX_LINE);
32
33 printf("receive from server: %s\n", buf);
34
35 close(sfd);
36
37 return 0;
38
}
...全文
相关推荐
使用SOCK-DGRAM类型的socket实现的ping程序
SOCK_DGRAM类型的socket常用于UDP通信,本文将尝试把这种socket用于ICMP协议,并完成一个简单的ping程序。使用ping去测试某个主机是否可用可能是一件很平常的事,尽管ping非常普通,但是编写一个实现ping功能的程序却并不是那么简单,因为ping使用的ICMP协议并不是一个应用层协议,在网上看到的实现ping的例子大多使用raw socket去实现,不仅增加了解析IP报头的麻烦,而且还需要有root权限才能运行,本文简要介绍ICMP协议,并给出一个使用普通的常用于UDP通信的socket实现ping的实例,本文将提供完整的源程序,本文的程序在 Ubuntu 20.04 下测试通过,gcc 版本号 9.4.0;阅读本文需要熟悉socket编程,对初学者而言,本文有一定的难度。
Socket 通信,很简单的聊天程序
Socket 通信,很简单的聊天程序,界面没有美化,还有些后续功能没有去实现,原理和功能差不多.
基于java socket网络编程实现的简单模拟qq聊天的程序,可实现并发聊天
基于java socket网络编程实现的简单模拟qq聊天的程序,可实现并发聊天,分为服务器和客户端两个部分
socket简单通讯程序
这是一个简单的java程序写的socket通讯,里面就二个类,一个服务器类一个客户端类,可以很好的帮忙技术人员初步了解socket
通过socket简单的winform聊天程序.zip
winform简单的聊天小程序,互相学习


