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 }
最后更新于 2023-10-11 08:49:00 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章