求助,怎么将tcp传输通信改成udp通信!!!!

huoshen001 2005-07-14 05:13:24
我要把一个tcp的变成UDP通信的,但是不知道怎么改,想找点资料,希望大家给点帮助。看不大懂我的意思的,我可以把我的代码给你看下。QQ:77203738。
...全文
362 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huoshen001 2005-07-18
谢谢大家的帮忙,我差不多解决这个问题了,顺便问下怎么给你们分数???
回复
Zhymax 2005-07-17
CString strAddr;
UINT nPort;
intSize = m_ClientSocket->ReceiveFrom(strData, sizeof(strData),strAddr,nPort,0);
回复
flashboy 2005-07-17
没那么容易吧,TCP改UDP, 你得考虑是否在乎数据的可靠性,如果在乎,那么需要在应用层来实现可靠性
回复
Practise_Think 2005-07-17
这很麻烦的,如果早期开发时封装可以的话(协议与IO操作松耦的话),可将IO那部分内部修改或重写就可以了,不然的话,几乎要整个网络部份重写,那就头痛了
回复
huoshen001 2005-07-15
我是要对一个按钮进行控制,点一下按钮就将消息发送出去。
我是这么写的
BOOL CFiTSATesterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ClientSocket->Create(8080,SOCK_DGRAM,"192.168.168.177");
m_ClientSocket->Bind(8080,"192.168.168.177");
..........
}
void CFiTSATesterDlg::OnBtnTo01()
{
CString strIPAddress;
CString strPort;
long port;
m_Edit_sv_ip.GetWindowText(strIPAddress);
m_Edit_sv_port.GetWindowText(strPort);
port = atol(strPort);
CString strMess;
CString strTemp;
CString disData = "送信:";
m_Edit_01_data.GetWindowText(strMess);
strMess = strMess + "\r";
m_ClientSocket->SendTo(strMess, strMess.GetLength(),port,strIPAddress,0);
for( int i = 0; i < strMess.GetLength(); i++ ) {
strTemp = disData;
disData.Format( "%s %02X", strTemp, (unsigned char)strMess.GetAt(i) );
}
disData = disData + "\r\n";
m_ClientSocket->AddText(disData);
}


CClientSocket *m_ClientSocket;
CClientSocket 是继承csocket的。

这里我把消息发出去后,经过服务器的处理后,接收服务器发来的数据,我接收应该怎么写?
void CClientSocket::OnReceive(int nErrorCode)
{
CClientSocket *m_ClientSocket;
CString disData = "受信:";
int intSize;
unsigned char strData[1024];
memset(strData, '\0', sizeof(strData));
m_ClientSocket->Create(8080,SOCK_DGRAM,"192.168.168.177");
m_ClientSocket->Bind(8080,"192.168.168.177");
intSize = m_ClientSocket->ReceiveFrom(strData, sizeof(strData),"192.168.168.71",8193,0);
if (intSize > 0)
{
CString tmp;
if( mode == 0 ) {
for( int i = 0; i < intSize; i++ ) {
tmp = disData;
disData.Format( "%s %02X", tmp, strData[i] );
}
disData = disData + "\r\n";

AddText(disData);
} else if( mode == 1 ) {
this->Send(this->mess, this->mess.GetLength());
}

}

CSocket::OnReceive(nErrorCode);
}
是这样么???

但是我这么写好像编译有问题。头大啊..........
回复
qrlvls 2005-07-15
根据你的具体应用要求有所不同,如果仅仅是点-点传输的话应该是很容易的,只不过需要注意保持数据的可靠性,可以模拟滑动窗口方式,参考 RUDP
回复
AntonlioX 2005-07-14
你可以去看看 vckbase里面的例子

http://www.vckbase.com/document/viewdoc/?id=1281
http://www.vckbase.com/document/viewdoc/?id=1284

回复
AntonlioX 2005-07-14
只要你的应用层协议不是很复杂 一般将TCP改为UDP都是很简单的。按照UDP的建立只是比TCp少了 connect 和 listen accept 。我讲的 不是很标准,但是基本意思这是如此。

你在转换的时候 要注意每次发出的包的大小 ,如果超过了MTU 就分包发送 ,
回复
Zhymax 2005-07-14
如果实现结构比较清晰的话,应该不是很麻烦
回复
ihavenoidea 2005-07-14
在网上搜一下 UDP 的相关例子
回复
ihavenoidea 2005-07-14
重新实现一遍吧~
回复
huoshen001 2005-07-14
我是要模拟一个客户端的设备,进行和一个服务器通信,本来是TCP的,后来发现用那个服务是用UDP协议的.我尝试在原来的代码里面改过了,但是还是不行.因为以前都没做过,不知道怎么入手了.谁有兴趣帮忙的话,我可以将代码发给他,

哎 头都大了 5555
回复
fisker0303 2005-07-14
晕啊,能行吗?如果程序不复杂,还是重新实现一遍吧。
回复
wang_yuanwai 2005-07-14
udp是面向无连接的,你把socket函数的SOCK_STREAM改成SOCK_DGRAM,sever端不用listen和accept函数,client端不用connect函数,原来的都留着就行了,祝你好运!
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-07-14 05:13
社区公告
暂无公告