zoukankan
html css js c++ java
WinSock UDP通讯实例
下载
#include
<
WinSock2.h
>
#include
<
stdio.h
>
#define PORT
8888
int
main()
//
server
{
WSADATA wsaData;
int
Ret
=
WSAStartup(MAKEWORD(
2
,
2
),
&
wsaData);
printf(
"
Server
!\n
"
);
if
(Ret
!=
0
)
{
printf(
"
无法初始化winsock.\n
"
);
WSACleanup();
}
else
{
//
printf("初始化winsock成功\n");
}
if
( LOBYTE( wsaData.wVersion )
!=
2
||
HIBYTE( wsaData.wVersion )
!=
2
)
{
WSACleanup( );
return
1
;
}
SOCKET socket
=
::socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
sockaddr_in addr;
addr.sin_addr.S_un.S_addr
=
INADDR_ANY;
addr.sin_family
=
AF_INET;
addr.sin_port
=
ntohs(PORT);
if
(socket
==
INVALID_SOCKET)
{
printf(
"
socket Error!
"
);
}
int
rs
=
bind(socket,(sockaddr
*
)
&
addr,sizeof(addr));
if
(rs
!=
0
)
{
printf(
"
bind failed!
"
);
return
1
;
}
char
buf[
200
]
=
"
\0
"
;
char
temp[
200
]
=
"
\0
"
;
sockaddr_in addrcl;
int
len
=
sizeof(sockaddr);
while
(
1
)
{
recvfrom(socket,buf,sizeof(buf),
0
,(sockaddr
*
)
&
addrcl,
&
len);
//
用新建的地址结构保存客户端的信息
sprintf(temp,
"
%s:%s
"
,inet_ntoa(addrcl.sin_addr),buf);
sendto(socket,temp,strlen(temp)
+
1
,
0
,(sockaddr
*
)
&
addrcl,sizeof(addr));
if
(strcmp(buf,
"
srvexit
"
)
==
0
)
{
break
;
}
printf(
"
%s
"
,buf);
}
closesocket(socket);
WSACleanup();
printf(
"
exit\n
"
);
return
0
;
}
#include
<
WinSock2.h
>
#include
<
stdio.h
>
#define PORT
8888
int
main()
{
WSADATA wsaData;
int
Ret
=
WSAStartup(MAKEWORD(
2
,
2
),
&
wsaData);
printf(
"
Client
..!\n
"
);
if
(Ret
!=
0
)
{
printf(
"
无法初始化winsock.\n
"
);
WSACleanup();
}
else
{
//
printf("初始化winsock成功\n");
}
SOCKET socketc
=
::socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
sockaddr_in addr;
addr.sin_addr.S_un.S_addr
=
inet_addr(
"
127.0.0.1
"
);
addr.sin_family
=
AF_INET;
addr.sin_port
=
ntohs(PORT);
if
(socketc
==
INVALID_SOCKET)
{
printf(
"
socket Error!
"
);
}
int
len
=
sizeof(sockaddr);
while
(
1
)
//
client
{
char
buf[
200
]
=
"
\0
"
;
char
rbuf[
300
]
=
"
\0
"
;
printf(
"
\n:
"
);
scanf(
"
%s
"
,
&
buf);
sendto(socketc,buf,strlen(buf)
+
1
,
0
,(SOCKADDR
*
)
&
addr,len);
//
用回原来的地址结构
recvfrom(socketc,rbuf,sizeof(rbuf),
0
,(SOCKADDR
*
)
&
addr,
&
len);
if
(strcmp(rbuf,
"
exit
"
)
==
0
)
{
break
;
}
printf(
"
%s
"
,rbuf);
}
closesocket(socketc);
WSACleanup();
printf(
"
end\n
"
);
return
0
;
}
查看全文
相关阅读:
Coin-row problem(1139)
算法的稳定性
折半查找的实现(1010)swust-oj
判断回文(0315)SWUST-OJ
逆置单链表(0957)swust-oj
单链表上查找算法的实现(0955) swust-oj
单链表的插入操作的实现(0952)SUWST-OJ
单链表的链接(0954)swust-oj
单链表的删除操作的实现(0953)swust-oj
ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(三)—用户账户及cookie配置
原文地址:https://www.cnblogs.com/ahuo/p/890826.html
最新文章
IntelliJ IDEA快捷键
finally和return的执行顺序
跳表ConcurrentSkipListMap学习笔记
Linux5种IO模型
红黑树学习笔记
ReentrantLock笔记(二) AQS队列同步器
ReentrantLock笔记(一) 重入锁应用
String底层原理学习笔记
RabbitMQ笔记
C++ 基础知识复习(六)
热门文章
C++ 基础知识复习(五)
C++ 基础知识复习(四)
C++ 基础知识复习(三)
C++ 基础知识复习(二)
C++ 基础知识复习(一)
转 列式存储
在db2数据库上模拟死锁场景 还是z上的
[转] CC 命令
Linux 压缩系列常用命令
初学Structs配置及其注意事项
Copyright © 2011-2022 走看看