window网口通讯搭建udp的client和server概略流程及代码
来源:互联网 发布:淘宝产品组合策略案例 编辑:程序博客网 时间:2024/05/23 01:13
window网口通讯搭建udp的client和server概略流程及代码
备注:①关于创建客户端发送线程、服务器端接收线程,可参见本博客的线程创建文档:http://blog.csdn.net/i_likechard/article/details/51544120
②本文归纳的udp通讯,参照的源代码下载地址:http://download.csdn.net/download/i_likechard/9536412
一、建立srv
1、建立工程时选择window socket;
2、.h文件中添加:
SOCKET SockSrv;
SOCKADDR_IN addrSrv;
3、.cpp文件中添加按钮事件:(线程的创建可以参见这篇我的文章:http://blog.csdn.net/i_likechard/article/details/51544120)
UINT __cdecl CudpDlg::ReceThread( LPVOID lparam )//线程2函数定义
{
CudpDlg *pDlg = (CudpDlg*)lparam;
SOCKADDR_IN addrClient;
int i=0;
int len=sizeof(SOCKADDR);
while(pDlg->tflag)
{
while (1)
{
int rcv = recvfrom(pDlg->SockSrv,pDlg->Buffer,2048,0,(SOCKADDR*)&addrClient,&len);
if(rcv==-1)
{
pDlg->MessageBox("接受错误");
}
for(i;pDlg->Buffer!='\0';i++)
{
pDlg->temp[i]=pDlg->Buffer[i];
}
}
}
return 0;
}
void CudpDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int rel;
SockSrv=socket(AF_INET,SOCK_DGRAM,0);
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(7001);
rel=bind(SockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR==rel)
{
MessageBox("绑定失败");
}
m_SendThread = AfxBeginThread(SendThread,this,THREAD_PRIORITY_NORMAL,0,0);
m_ReceThread = AfxBeginThread(ReceThread,this,THREAD_PRIORITY_NORMAL,0,0);
m_button1.EnableWindow(FALSE);
}
//服务器需要bind,对于网口可设置为单一网口,也可设置为INADDR_ANY
二、建立client
1、建立工程时选择window socket;
2、.h文件中添加:
SOCKET SockClient;
SOCKADDR_IN addrClient;
3、.cpp文件中添加按钮事件:
①创建套接字
CString strIP;
BYTE IP0,IP1,IP2,IP3;
DWORD dwIP;
m_strIP.GetAddress(IP0,IP1,IP2,IP3);
strIP.Format(_T("%d.%d.%d.%d"),IP0,IP1,IP2,IP3);
// TODO: Add your control notification handler code here
sockClient=socket(AF_INET,SOCK_DGRAM,0);
addrClient.sin_addr.S_un.S_addr=inet_addr(strIP);
addrClient.sin_family=AF_INET;
addrClient.sin_port=htons(7001);
//bind(sockClient,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));
//client 无需bind端口。
②创建一个发送线程()
while(1)
{
int iEnd=sendto(pDlg->sockClient,temp,ilen,0,(SOCKADDR*)&(pDlg->addrSrv),sizeof(SOCKADDR));
if (iEnd==SOCKET_ERROR)
{
strError.Format("发送文件数据失败:%d",error=WSAGetLastError());
pDlg->MessageBox(strError,"错误",MB_ICONSTOP);
break;
}
}
三、对于udp的双向通讯
一般而言,udp通信只能够实现客户端向服务端发送数据。想要实现基于udp的双向通讯,只需要在客户端和服务端中建立套接字的逻辑互换。网口可以不变,重新绑定一个新端口、在各自程序中重新新建一个线程用于发送或者接收数据就可以了。相当于在客户端新建了一个服务端套接字,在服务端新建了一个客户端套接字。
- window网口通讯搭建udp的client和server概略流程及代码
- UDP server,client 代码
- c#的udp通讯代码
- 基于UDP协议可靠传输协议QUIC协议和golang server代码和client代码
- UDP通信client端和server端
- linux 下的UDP client/server 示例
- 简单的socket UDP Client Server通信
- UDP类型的 client/server 实例
- 基于TCP/UDP的Server-Client
- UDP通讯流程
- Python UDP Server Client
- UDP Server/Client
- window API(UDP/IP)通讯
- 【Server端和Client端常见的通信方式】-TCP/IP和UDP
- TCP和UDP的C代码编写流程
- socket一个server多个client间的通讯学习历程和demo
- 【代码积累】UDP client
- UDP 通讯代码
- Proxy Server源码及分析
- 算法设计与分析 模拟考 Percolation
- wx.navigateBack携带参数
- JAVA JNI在LIUNX下编译SO库或找不到SO库问题解决no xxx on java.library.path
- 解决AaptParser: aapt dump badging stderr: aapt: error while loading shared libraries: libc++.so
- window网口通讯搭建udp的client和server概略流程及代码
- bzoj2716 [Violet 3]天使玩偶(KDtree)
- 线程日志标记和接口日志标记
- Spring MVC 数据绑定入门
- 谈谈JS中常遇到的浏览器兼容问题和解决方法
- docker toolbox 1
- PAT (Advanced Level) Practise 1006. Sign In and Sign Out (25)
- android仿京东首页的垂直跑马灯
- NKOJ 4350 (SDOI 2016)生成魔咒(后缀自动机)