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
;
}
查看全文
相关阅读:
jquery之自定义data属性
js获取显示器、页面等高度 (转)
A网页高度随B内容而自然变化兼容各种浏览器
DIV+ul+LI实现表格效果以及div带滑动条
不同人对待问题不同态度
MySQL,SqlServer数据库关键字在程序中处理
一款连接SqlServer的数据库工具
VB.Net日期格式化的5种使用方法
MySQL与SqlServer中update操作同一个表问题
SqlServer中存储过程 returnC#代码处理以及对应的MySQL如何改写
原文地址:https://www.cnblogs.com/ahuo/p/890826.html
最新文章
【appium】关于logcat
[转]Linux 正则表达式详解
通配符和正则表达式的区别
【转】Linux中xargs的用法
[转]Linux finger命令
【转】Linux命令学习手册-split命令
【Linux】字符转换命令expand
[转]Linux下paste命令详解
[转]linux 下 join命令总结
【转】Linux字符转换命令col
热门文章
[转]linux tr命令详解
C# 计算时间差 用timespan函数
在C#代码中应用Log4Net系列教程(附源代码)【转载】
【解决办法】QQ互联 redirect uri is illegal(100010)
[接口] 支付宝及时到帐接口使用详解[转载]
SKU
ECshop 数据库表结构
ref(C# 参考)
C#中yield return用法分析
跨站脚本攻击之XSS漏洞
Copyright © 2011-2022 走看看