C语言编写基于TCP和UDP协议的Socket通信程序示例

2025-05-27 0 91

Tcp多线程服务器和客户端程序
服务器程序:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#define PORT 8082

#define BUFSIZE 512

char buf[BUFSIZE+1];

void* fun(void* x)

{

//printf("enter thread!\\r\\n");

int new_fd=*((int*)x);

while(1)

{

int z=read(new_fd,buf,BUFSIZE);//第 6 步 读取套接字

if(z==0){printf("client close !");break;};

buf[z]='\\0';

printf("%s\\r\\n",buf);//打印

};

}

int newfd[512];

int inewfd=0;

int main()

{

//第 1 步 创建套接字

int sockfd=socket(AF_INET,SOCK_STREAM,0);

//第 2 步 设置地址结构体

struct sockaddr_in svraddr;

svraddr.sin_family=AF_INET;//使用 internet 协议

svraddr.sin_port=htons(PORT);

inet_aton("0.0.0.0",&svraddr.sin_addr);

//第 3 步 绑定

int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));

if(ret<0){printf("error bind!\\r\\n");exit(-1);};

//第 4 步 监听

listen(sockfd,128);

while(1)

{

newfd[inewfd++]=accept(sockfd,NULL,NULL); //第 5 步 接收

pthread_t ntid;

pthread_create(&ntid,NULL,fun,(void*)&(newfd[inewfd-1]));

}

}

注意:

?

1
gcc server.c -o server -lpthread

客户端程序 cli.c

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#define PORT 8082

#define BUFSIZE 512

char buf[BUFSIZE+1];

int main()

{

//第 1 步 创建一个体套接字

int sockfd=socket(AF_INET,SOCK_STREAM,0);

//第 2 步 设置 addr 结构体

struct sockaddr_in svraddr;

svraddr.sin_family=AF_INET;//使用 internet 协议

svraddr.sin_port=htons(PORT);

inet_aton("127.0.0.1",&svraddr.sin_addr);

//第 3 步 连接服务器

connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));

while(1)

{

scanf("%s",buf);

write(sockfd,buf,strlen(buf)); //第 4 步 向套接字中写入字符串

}

}


Udp的服务器程序和客户端程序

服务器程序:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#define PORT 8082

#define BUFSIZE 512

char buf[BUFSIZE+1];

int main()

{

//第 1 步 创建套接字

int sockfd=socket(AF_INET,SOCK_DGRAM,0);

//第 2 步 设置地址结构体

struct sockaddr_in svraddr;

svraddr.sin_family=AF_INET;//使用 internet 协议

svraddr.sin_port=htons(PORT);

inet_aton("0.0.0.0",&svraddr.sin_addr);

//第 3 步 绑定

int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));

if(ret<0){printf("cannot bind!\\r\\n");exit(-1);};

while(1)

{

struct sockaddr_in cli;

int len=sizeof(cli);

int z=recvfrom(sockfd,buf,BUFSIZE,0,(struct sockaddr*)&cli,&len);//第 6 步 读取套接字

buf[z]='\\0';

printf("%s\\r\\n",buf);//打印

}

}

客户端程序 cli.c

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <unistd.h>

#define PORT 8082

#define BUFSIZE 512

char buf[BUFSIZE+1];

int main()

{

//第 1 步 创建一个体套接字

int sockfd=socket(AF_INET,SOCK_DGRAM,0);

//第 2 步 设置 addr 结构体

struct sockaddr_in svraddr;

svraddr.sin_family=AF_INET;//使用 internet 协议

svraddr.sin_port=htons(PORT);

inet_aton("127.0.0.1",&svraddr.sin_addr);

//第 3 步 连接服务器

//connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));

while(1)

{

scanf("%s",buf);

sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&svraddr,sizeof(svraddr)); //第 4 步 向套接字中写入字符串

}

}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C语言编写基于TCP和UDP协议的Socket通信程序示例 https://www.kuaiidc.com/74886.html

相关文章

发表评论
暂无评论