65.9K
CodeProject 正在变化。 阅读更多。
Home

使用VC++.NET进行TCP/IP发送和接收

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.50/5 (5投票s)

2004年12月5日

2分钟阅读

viewsIcon

55458

downloadIcon

2259

本文介绍了如何使用 TCP 和工作线程在 C++ 中发送和接收数据。

Server

Client

引言

本文演示了如何在VC++.NET中使用TCP/IP发送和接收数据。本文还描述了如何使用线程以及如何使用自定义发布消息与线程进行通信。

背景

本文使用CSocket对象进行通信,并使用WM_USER类型的发布消息与线程进行通信。它还使用了工作线程。

创建线程

线程通过使用AfxBeginThread(ReceiveMessage,&m_EDT_Port)创建。此函数有两个重载。一个用于调用UI线程,另一个用于调用工作线程。我们在这里使用一个工作线程。在这里,“ReceiveMessage”是指线程将要执行的函数,“&m_EDT_Port”是指我将从编辑控件中获取的端口号传递给该函数。

接收和发送

在这个示例程序中,我使用了一个服务器套接字来接收,并使用了一个客户端套接字来发送。但你也可以反过来做。这意味着你可以使用服务器套接字和客户端套接字调用CSocket.Send()CSocket.Receive。关键在于在一侧需要一个服务器套接字,而在另一侧需要一个客户端套接字来建立通信。一旦建立连接,你就可以从客户端和服务器套接字发送和接收数据。

Receive

CSocket* sockServ;
CSocket* sockRecv;
        

上述变量是全局定义的

CSocket sockServT;
CSocket sockRecvT;

sockServ = &sockServT;
sockRecv = &sockRecvT;

State = sockServ->Create(PortNo);

sockServ->Listen();
sockServ->Accept(*sockRecv);
RecvData=new char[500];

int len = sockRecv->Receive(RecvData ,500);
        

在这个代码块中,只显示了所需的行。在示例程序中,你将找到其他定义和内容。

正如你所看到的,我们使用了一个服务器套接字,并首先使用端口号创建它。然后,我们在该端口号上开始监听。然后,我们在另一个套接字中接受端口,并使用该套接字来接收数据。请记住,你也可以使用相同的端口来发送数据。

发送

sockClient.Create();
sockClient.Connect(IP,Port);
DataSend=new char[Data.GetLength()];
DataSend=Data.GetBuffer();

sockClient.Send(DataSend,Data.GetLength());
sockClient.Close();
        

正如你所看到的,使用客户端套接字发送就像这样简单。只需使用IP和端口连接客户端,你就可以开始发送或接收数据。

这就是使用TCP进行发送和接收的全部内容。

© . All rights reserved.