`
isiqi
  • 浏览: 16487926 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

WinSock通讯

 
阅读更多
利用WinSock进行无连接的通信.

WinSock提供了对UDP(用户数据报协议)的支持,通过UDP协议我们可以向指定IP地址的主机发送数据,同时也可以从指定IP地址的主机接收数据,发送和接收方处于相同的地位没有主次之分。利用CSocket操纵无连接的数据发送很简单,首先生成一个本地套接口(需要指明SOCK_DGRAM标记),然后利用
int CAsyncSocket::SendTo( const void* lpBuf, int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags = 0 )发送数据,
int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString& rSocketAddress, UINT& rSocketPort, int nFlags = 0 )接收数据。函数调用顺序。

利用UDP协议发送和接收都可以是双向的,就是说任何一个主机都可以发送和接收数据。但是UDP协议是无连接的,所以发送的数据不一定能被接收,此外接收的顺序也有可能与发送顺序不一致。下面是相关代码:

/*
发送方在端口6800上向接收方端口6801发送数据
*/
//发送方代码:
BOOL CMy62_s1_clientDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//创建本地套接口
m_sockSend.Create(6800,SOCK_DGRAM,NULL);
//绑定本地套接口
m_sockSend.Bind(6800,"127.0.0.1");
//创建一个定时器定时发送
SetTimer(1,3000,NULL);
...
}
void CMy62_s1_clientDlg::OnTimer(UINT nIDEvent)
{
static iIndex=0;
char szSend[20];
sprintf(szSend,"%010d",iIndex++);
//发送UDP数据
int iSend= m_sockSend.SendTo(szSend,10,6801,"127.0.0.1",0);
TRACE("sent %d byte\n",iSend);
...
}

//接收方代码
BOOL CMy62_s1_serverDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//创建本地套接口
m_sockRecv.Create(6801,SOCK_DGRAM,"127.0.0.1");
//绑定本地套接口
m_sockRecv.Bind(6801,"127.0.0.1");
//创建一个定时器定时读取
SetTimer(1,3000,NULL);
...
}
void CMy62_s1_serverDlg::OnTimer(UINT nIDEvent)
{
char szRecv[20];
CString szIP("127.0.0.1");
UINT uPort=6800;
//接收UDP数据
int iRecv =m_sockRecv.ReceiveFrom(szRecv,10,szIP,uPort,0);
TRACE("received %d byte\n",iRecv);
...
}
/*
接收方采用同步读取数据的方式,所以没有读到数据函数调用将不会返回
*/
利用WinSock进行有连接的通信

WinSock提供了对TCP(传输控制协议)的支持,通过TCP协议我们可以与指定IP地址的主机建立,同时利用建立的连接可以双向的交换数据。利用CSocket操纵有连接数据交换很简单,但是在有连接的通信中必需有一方扮演服务器的角色等待另一方(客户方)的连接请求,所以服务器方需要建立一个监听套接口,然后在此套接口上等待连接。当连接建立后会产生一个新的套接口用于通信。而客户方在创建套接口后只需要简单的调用连接函数就可以创建连接。对于有连接的通信不论是数据的发送还是发送与接收的顺序都是有保证的。双方的函数调用顺序。

下面的代码演示了如何建立连接和发送/接收数据:

/*
服务器方在端口6802上等待连接,当连接建立后关闭监听套接口
客户方向服务器端口6802发起连接请求
*/
BOOL CMy63_s1_serverDlg::OnInitDialog()
{
CDialog::OnInitDialog();

CSocket sockListen;
//创建本地套接口
sockListen.Create(6802,SOCK_STREAM,"127.0.0.1");
//绑定参数
sockListen.Bind(6802,"127.0.0.1");
sockListen.Listen(5);
//等待连接请求,m_sockSend为成员变量,用于通信
sockListen.Accept(m_sockSend);
//关闭监听套接口
sockListen.Close();
//启动定时器,定时发送数据
SetTimer(1,3000,NULL);
...
}
void CMy63_s1_serverDlg::OnTimer(UINT nIDEvent)
{
static iIndex=0;
char szSend[20];
sprintf(szSend,"%010d",iIndex++);
//发送TCP数据
int iSend= m_sockSend.Send(szSend,10,0);
...
}
BOOL CMy63_s1_clientDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//创建本地套接口
m_sockRecv.Create();
//发起连接请求
BOOL fC=m_sockRecv.Connect("127.0.0.1",6802);
TRACE("connect is %s\n",(fC)?"OK":"Error");
//启动定时器,定时接收数据
SetTimer(1,3000,NULL);
...
}
void CMy63_s1_clientDlg::OnTimer(UINT nIDEvent)
{
char szRecv[20];
//接收TCP数据
int iRecv =m_sockRecv.Receive(szRecv,10,0);
TRACE("received %d byte\n",iRecv);
if(iRecv>=0)
{
szRecv[iRecv]='\0';
m_szRecv=szRecv;
UpdateData(FALSE);
}
...
}
分享到:
评论

相关推荐

    PB使用winsock通讯的例子

    标题中的“PB使用winsock通讯的例子”表明这是一个关于PowerBuilder(PB)利用Winsock控件进行网络通信的应用示例。PowerBuilder是一种强大的Windows应用程序开发工具,而Winsock是Windows操作系统中用于实现TCP/IP...

    VB-TCPclient.rar_TCP通讯VB_VB client TCP_Winsock通讯_vb ip_vb winsoc

    "Winsock通讯"指的是在VB中使用的Winsock控件,它是实现网络通信的关键组件。"vb ip_vb winsoc"可能是对VB处理IP地址和Winsock控件功能的简短描述。 描述中提到的"TCP/ip通讯客户端的程序"证实了这是个通过TCP/IP...

    VB-winsock通讯(类QQ)

    【VB-winsock通讯(类QQ)】是一种使用Visual Basic(VB)编程语言,结合Winsock控件实现的网络通信程序,其设计灵感来源于腾讯QQ,主要用于实现类似即时通讯的功能。在VB中,Winsock控件提供了低级别的网络通信功能,...

    vb6.0 的 ModusTCP 通讯例程基于 Winsock 通讯

    vb6.0 的 ModusTCP 通讯例程基于 Winsock 通讯

    tcp ip下winsock通讯机制

    本文论述Windows及unix环境下实现计算机数据传输服务的机制,提供了一种网络环境下实现计算机通信的方法,并给出了通信应用接口程序的具体实现代码。

    main.rar_Winsock 通讯

    在信息技术领域,网络通信是不可或缺的一部分,而Winsock作为Windows平台上的网络编程接口,为开发者提供了强大的通讯能力。本教程将深入探讨如何利用Winsock编程实现多对一的通讯模式,并实现客户端上线的自动提醒...

    pb winsock通讯的范例

    这是PB Socket 程序(异步流模式),对需要的人能够有用。 关键说明 服务器端 1,SocketServer中,有个uo_Socket_Server类型的数组Connects,实现多个连接管理。 2,uo_Socket_Server实例是通过w_1.tab_1.OpenTab()...

    VB6编写的TCP调试助手,采用Winsock通讯

    注册VB6.REG,注册之后,运行VB6,打开工程——部件——选择Microsoft winsock control 6.0 (SP5),然后就可以调用winsock编写,里面获取配置config.ini是以前写的其他程序,有些没用信息,自行修改即可,可以学习...

    C/S通信 Winsock

    1. **Winsock控件**:VB6.0提供了Winsock Control,这是一款可以直接用于网络通信的控件。通过添加这个控件到窗体上,开发者可以方便地编写客户端或服务器端代码。 2. **TCP/IP协议**:Winsock控件基于TCP/IP协议,...

    多线程的winsock通讯服务器端的例程

    【多线程Winsock通信服务器端程序详解】 在IT领域,网络通信是不可或缺的一部分,而Windows操作系统中的Winsock API提供了一种实现网络通信的方式。本文将深入探讨如何创建一个多线程的Winsock通信服务器端,以处理...

    winsock 编程 大全 socket tcp 网络 通讯

    tcp udp winsock socket network 网络 编程 programming

    Qt实现Winsock网络编程—Tcp服务端和客户端通信(多线程)示例程序demo

    在本文中,我们将深入探讨如何使用Qt库与Winsock API结合,实现TCP服务端和客户端的多线程通信。这个示例程序分为两个部分:`Socket_Tcp_Server`(服务端)和`Socket_Tcp_Client`(客户端),它们都是基于Qt 5.9.7...

    使用winsock进行通讯

    powerbuilder中使用winsock进行通讯的例子powerbuilder中使用winsock进行通讯的例子

    Windows Sockets.doc

    **Windows Sockets (Winsock)** 是Windows操作系统中的一个应用程序接口(API),它允许程序员进行网络通信,实现客户端和服务器之间的数据交换。这个接口是基于Berkeley Sockets模型的,因此也常被称为Berkeley ...

    TCP,UDP WINSOCK通信 VC

    Windows Sockets,通常称为Winsock,是Microsoft Windows操作系统中实现这两者的一种API。本篇文章将深入探讨TCP、UDP以及在VC++(Visual C++)环境中如何利用Winsock进行通信。 TCP是一种面向连接的、可靠的协议。...

    windows下winsock实现socket通信(服务端+客户端),界面是qt实现的。

    zip包里面包括了两个项目:SocketServer服务端,SocketClient客户端。拿到之后需要在客户端代码里面配置服务端ip以及端口。编译环境是vs2015+Qt5.9.0.demo是带有界面的,不是控制台应用。

    winSock UDP通讯例子

    **标题:“winSock UDP通讯例子”** 在计算机网络编程中,Winsock(Windows Sockets)是Windows操作系统提供的一种API,用于实现TCP/IP协议栈。这个标题提到的是利用Winsock库进行UDP(User Datagram Protocol)...

    基于winsock的通讯程序

    该程序是利用winsock控件开发的远程通讯程序,可以用来开发远程数据交互方面的程序,希望对你有用。

    MFC连接数据库SQL以及通讯

    最后,Winsock通讯(TCP和UDP)方面,MFC提供了`CAsyncSocket` 类来实现网络通信。TCP通讯基于连接,适用于需要可靠传输的场景;UDP通讯则无连接,适合广播或不需要确认的传输。创建TCP服务器示例: ```cpp ...

Global site tag (gtag.js) - Google Analytics