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
;
}
查看全文
相关阅读:
桃李春风一杯酒,江湖夜雨十年灯
实现.net下的动态代理(续)多对象Mixin
队列不存在,或您没有足够的权限执行该操作另一种原因
.NET托管内存类应用的内存泄漏分析和诊断(转)
移动硬盘 执行页内操作时的错误修复方法
阮一峰:四位计算机的原理及其实现
一款mvvm框架运用介绍(转)
C#制作CAB压缩包压缩解压类
ASP.NET C# 向 ACCESS 插入日期型数据 标准表达式中数据类型不匹配
SQL Server日志清除的两种方法
原文地址:https://www.cnblogs.com/ahuo/p/890826.html
最新文章
SSIS中的记录集目标
如何替换掉代码段中的行号
Analysis Services 2005 protocol XMLA over TCP/IP
MOSS : 如何动态修改列表视图定义
SSIS中的原始文件源和目标
为SSIS编写自定义数据流组件之进阶篇:自定义属性的下拉式编辑器
SSAS : XMLA over TCP/IP的实现
SSIS 2008开始支持直接将Excel 2007文件作为数据源和目标
SSIS中的SQL Server目标,OLEDB目标以及SQL Server Mobile目标
解析codepage和charset的含义及其应用
热门文章
SSIS中的字符提取组件
SSAS : 如何更改服务器的加密选项
[晒计划]3040中长期规划暨2009年年度计划
车牌识别及验证码识别的一般思路
if vs. switch,测试与分析
【转古诗】击壤歌
实现.net下的动态代理
[软件发布]可媲美EndNote的文献管理软件与论文写作辅助软件RefNavigator
发布一个嘿嘿嘿的技术方案 —— 商用群发p2p网络
最恨匈牙利命名法
Copyright © 2011-2022 走看看