UDPClient C语言的实现过程

网络 网络管理
下面我们解析了用C语言实现UDPClient程序的步骤。希望能够给大家提供一个参考。那么具体内容请大家浏览文章内容吧。

UDPClient程序是我们经常会使用的程序。很多语言教程中,都有挂怒这方面的应用讲解。现在我们就来讲解一下如何用C语言实现UDPClient的步骤。现在让我们仔细来看看具体的编写UDPClient程序的步骤

(1)初始化sockaddr_in结构的变量,并赋值。这里使用“8888”作为连接的服务程序的端口,从命令行参数读取IP地址,并且判断IP地址是否符合要求。

(2)使用socket()来建立一个UDP socket,第二个参数为SOCK_DGRAM。

(3)使用connect()来建立与服务程序的连接。与TCP协议不同,UDP的connect()并没有与服务程序三次握手。上面说了UDP是非连接的,实际上也可以是连接的。使用连接的UDP,kernel可以直接返回错误信息给用户程序,从而避免由于没有接收到数据而导致调用recvfrom()一直等待下去,看上去好像客户程序没有反应一样。

(4)向服务程序发送数据,因为使用连接的UDP,所以使用write()来替代sendto()。这里的数据直接从标准输入读取用户输入。

(5)接收服务程序发回的数据,同样使用read()来替代recvfrom()。

(6)处理接收到的数据,这里是直接输出到标准输出上。

udpclient.c程序内容:

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. #include  
  8. #include  
  9. #define MAXLINE 80  
  10. #define SERV_PORT 8888  
  11. void do_cli(FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen)  
  12. {  
  13. int n;  
  14. char sendline[MAXLINE], recvline[MAXLINE + 1];  
  15. /* connect to server */ 
  16. if(connect(sockfd, (struct sockaddr *)pservaddr, servlen) == -1)  
  17. {  
  18. perror("connect error");  
  19. exit(1);  
  20. }  
  21. while(fgets(sendline, MAXLINE, fp) != NULL)  
  22. {  
  23. /* read a line and send to server */ 
  24. write(sockfd, sendline, strlen(sendline));  
  25. /* receive data from server */ 
  26. n = read(sockfd, recvline, MAXLINE);  
  27. if(n == -1)  
  28. {  
  29. perror("read error");  
  30. exit(1);  
  31. }  
  32. recvline[n] = 0; /* terminate string */ 
  33. fputs(recvline, stdout);  
  34. }  
  35. }  
  36. int main(int argc, char **argv)  
  37. {  
  38. int sockfd;  
  39. struct sockaddr_in srvaddr;  
  40. /* check args */ 
  41. if(argc != 2)  
  42. {  
  43. printf("usage: udpclient \n");  
  44. exit(1);  
  45. }  
  46. /* init servaddr */ 
  47. bzero(&servaddr, sizeof(servaddr));  
  48. servaddr.sin_family = AF_INET;  
  49. servaddr.sin_port = htons(SERV_PORT);  
  50. if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)  
  51. {  
  52. printf("[%s] is not a valid IPaddress\n", argv[1]);  
  53. exit(1);  
  54. }  
  55. sockfd = socket(AF_INET, SOCK_DGRAM, 0);  
  56. do_cli(stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));  
  57. return 0;  

 

责任编辑:佟健 来源: 互联网
相关推荐

2010-07-08 13:32:17

UDPClient

2010-11-22 16:01:08

C++多态

2009-08-26 09:48:48

C#异步套接字

2009-08-25 11:13:28

C#获取逻辑硬盘信息

2021-11-19 11:36:42

语言string字符串

2020-10-23 06:56:00

C语言动态字符串

2022-10-21 09:01:41

StudentC++类型

2010-03-11 19:16:32

Python语言

2010-02-05 15:59:26

C++函数重载

2010-01-20 09:14:49

C语言模块化

2010-01-15 17:38:37

C++语言

2023-12-07 12:59:46

C语言循环队列代码

2009-08-25 10:44:50

C#实现多语言

2013-02-21 17:02:00

C语言

2009-09-02 16:20:22

C#动态创建数组

2020-04-25 20:18:04

C语言编程汇编语言

2020-04-15 11:07:31

C语言对象思想

2023-10-26 11:03:50

C语言宏定义

2009-08-31 17:13:09

2011-07-05 16:57:53

C语言
点赞
收藏

51CTO技术栈公众号