udp在c语言中的实现过程

服务器代码

# includes ys/socket . h;

# includestring.h

# include netinet/in . h;

# includestdio.h

# includestdlib.h

# includefcntl.h

# includes ys/stat . h;

# includeunistd.h

# includeerrno.h

# includes ys/select . h;

# includes ys/time . h;

# includeunistd.h

# includes ys/types . h;

#定义SERV港2500

#定义MAX_SIZE 1024*40

用charname c语言实现udp文件传输 void ThreadReceive(PVOID参数)

{

服务器中的静态结构sockaddr _ in//绑定地址

静态套接字ListenSocket//等待接收数据的套接字

char buf[4096];

int len = sizeof(client);

int结果;

ListenSocket = socket(PF_INET,SOCK_DGRAM,IP proto _ UDP);

if(listen SOCKET = = INVALID _ SOCKET)

{

perror("打开流套接字");

退出(0);

}

server.sin _ family = PF _ INET

server . sin _ addr . s _ addr = htonl(in addr _ ANY);//任何地址

server . sin _ PORT = htons(LOCAL _ PORT);

if(SOCKET _ ERROR = = bind(listen SOCKET,(struct sockaddr *)server,sizeof(server)))

{

Printf("错误:绑定失败\ n ");

出口(1);

close socket(listen socket);

}

printf("套接字端口%d \n ",ntohs(server . sin _ port));

while(真)

{

//接收数据

result = recvfrom(ListenSocket,buf,sizeof(buf)-1,0,(struct sockaddr *)client,len);

如果(结果0)

{

buf[结果]= 0;

inet_ntoa(client.sin_addr),ntohs(client . sin _ port));

}

}

close socket(listen socket);

}

有没有在windows下用C语言实现udp协议的代码? Windows下C语言套接字编程实例(TCP和UDP)

一个。传输控制协议(Transmission Control Protocol)

服务器端:

复制代码

1 #包含“stdafx.h”

2 #包含stdio.h

3 #包含winsock2.h

5 #杂注注释(lib,“ws2_32.lib”)

7 int main(int argc,char* argv[])

8 {

9 //初始化WSA

10 WORD sockVersion = MAKEWORD(2,2);

11 WSADATA wsaData

12 if(WSAStartup(sockVersion,wsaData)!=0)

13 {

14返回0;

15 }

16

17 //创建一个套接字

18 SOCKET slisten = socket(AF_INET,SOCK_STREAM,IP proto _ TCP);

19 if(slisten == INVALID_SOCKET)

20 {

21 printf("套接字错误!");

22返回0;

23 }

24

25 //绑定IP和端口

26 sockaddr _ in sin

27 sin.sin _ family = AF _ INET

28 sin . sin _ port = htons(8888);

29 sin.sin_addr。S_un。S _ addr = INADDR _ ANY

30 if(bind(slisten,(LPSOCKADDR)sin,sizeof(sin)) == SOCKET_ERROR)

31 {

32 printf("绑定错误!");

33 }

34

35 //开始监控

36 if(listen(slisten,5) == SOCKET_ERROR)

37 {

38 printf("监听错误!");

39返回0;

40 }

41

42 //循环接收数据

43插座客户端;

44 sockaddr _ in remoteAddr

45 int nAddrlen = sizeof(remote addr);

46 char rev data[255];

47 while(真)

48 {

49 printf("等待连接...\ n ");

50 sClient = accept(slisten,(SOCKADDR *)remoteAddr,nAddrlen);

51 if(sClient == INVALID_SOCKET)

52 {

53 printf("接受错误!");

54继续;

55 }

56 printf("接收到一个连接:% s \ r \ n ",inet _ ntoa(remote addr . sin _ addr));

57

58 //接收数据

59 int ret = recv(sClient,revData,255,0);

60如果(ret 0)

61 {

62 rev data[ret]= 0x 00;

63 printf(revData);

64 }

65

66 //发送数据

67 char * sendData = "你好,TCP客户端!\ n ";

68 send(sClient,sendData,strlen(sendData),0);

69 close socket(s client);

70 }

71

72 close socket(s listen);

73 WSACleanup();

74返回0;

75 }

复制代码

客户端:

复制代码

1 #包含“stdafx.h”

2 #包括WINSOCK2。H

3 #包括STDIO。H

5 #杂注注释(lib,“ws2_32.lib”)

8 int main(int argc,char* argv[])

9 {

10 WORD sockVersion = MAKEWORD(2,2);

11 WSADATA数据;

12 if(WSAStartup(sockVersion,data)!= 0)

13 {

14返回0;

15 }

16

17 SOCKET sclient = socket(AF_INET,SOCK_STREAM,IP proto _ TCP);

18 if(sclient == INVALID_SOCKET)

19 {

20 printf("无效套接字!");

21返回0;

22 }

23

24 sockaddr _ in serAddr

25 serAddr.sin _ family = AF _ INET

26 seraddr . sin _ port = htons(8888);

27 serAddr.sin_addr。S_un。s _ addr = inet _ addr(" 127 . 0 . 0 . 1 ");

28 if (connect(sclient,(sockaddr *)serAddr,sizeof(serAddr)) == SOCKET_ERROR)

29 {

30 printf("连接错误!");

31 close socket(s client);

32返回0;

33 }

34 char * sendData = "你好,TCP服务器,我是客户端!\ n ";

35 send(sclient,sendData,strlen(sendData),0);

36

37 char recData[255];

38 int ret = recv(sclient,recData,255,0);

39如果(ret 0)

40 {

41 recData[ret]= 0x 00;

42 printf(recData);

43 }

44 close socket(s client);

45 WSACleanup();

46返回0;

47 }

复制代码

二。用户数据报协议(User Datagram Protocol)

服务器端

复制代码

1 #包含“stdafx.h”

2 #包含stdio.h

3 #包含winsock2.h

5 #杂注注释(lib,“ws2_32.lib”)

7 int main(int argc,char* argv[])

8 {

9 WSADATA wsaData

10 WORD sockVersion = MAKEWORD(2,2);

11 if(WSAStartup(sockVersion,wsaData)!= 0)

12 {

13返回0;

14 }

15

16 SOCKET ser SOCKET = SOCKET(AF _ INET,SOCK_DGRAM,IP proto _ UDP);

17 if(serSocket == INVALID_SOCKET)

18 {

19 printf("套接字错误!");

20返回0;

21 }

22

23 sockaddr _ in serAddr

24 serAddr.sin _ family = AF _ INET

25 seraddr . sin _ port = htons(8888);

26 serAddr.sin_addr。S_un。S _ addr = INADDR _ ANY

27 if(bind(serSocket,(sockaddr *)serAddr,sizeof(serAddr)) == SOCKET_ERROR)

28 {

29 printf("绑定错误!");

30 close socket(ser socket);

31返回0;

32 }

33

34 sockaddr _ in remoteAddr

35 int nAddrLen = sizeof(remote addr);

36 while(真)

37 {

38 char recv data[255];

39 int ret = recvfrom(serSocket,recvData,255,0,(sockaddr *)remoteAddr,nAddrLen);

40如果(ret 0)

41 {

42 recv data[ret]= 0x 00;

43 printf("已接收连接:% s \ r \ n ",inet _ ntoa(remote addr . sin _ addr));

44 printf(recv data);

45 }

46

47 char * sendData = "来自服务器的UDP数据包\ n ";

48 sendto(serSocket,sendData,strlen(sendData),0,(sockaddr *)remoteAddr,nAddrLen);

四十九个

50 }

51 close socket(ser socket);

52 WSACleanup();

53返回0;

54 }

复制代码

客户端

复制代码

1 #包含“stdafx.h”

2 #包含stdio.h

3 #包含winsock2.h

5 #杂注注释(lib,“ws2_32.lib”)

7 int main(int argc,char* argv[])

8 {

9 WORD socketVersion = MAKEWORD(2,2);

10 WSADATA wsaData

11 if(WSAStartup(socketVersion,wsaData)!= 0)

12 {

13返回0;

14 }

15 SOCKET sclient = socket(AF_INET,SOCK_DGRAM,IP proto _ UDP);

16

17 sockaddr _ in sin

18 sin.sin _ family = AF _ INET

19 sin . sin _ port = htons(8888);

20 sin.sin_addr。S_un。s _ addr = inet _ addr(" 127 . 0 . 0 . 1 ");

21 int len = sizeof(sin);

22

23 char * sendData = "来自客户端的数据包。\ n ";

24 sendto(sclient,sendData,strlen(sendData),0,(sockaddr *)sin,len);

25

26 char recv data[255];

27 int ret = recvfrom(sclient,recvData,255,0,(sockaddr *)sin,len);

28中频(ret 0)

29 {

30 recv data[ret]= 0x 00;

31 printf(recv data);

32 }

33

34 close socket(s client);

35 WSACleanup();

36返回0;

37 }

相关文章

发表新评论