VC++ 中 Winsock 编程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:09:52
我写了个聊天程序(基于UDP/IP,最原始的,输入对方IP然后聊天),我家是几台电脑同时上网,所以装了个调制解析器的盒子,有根主线和几根分线,我用主线测试我的程序的时候,可以与别人聊天,但是我用其中的一根分线测试的时候,即使还是刚才那个IP地址(同一个人),我的话就传不出去了,(但是QQ能用)而且我的IP显示的是192.168.0.X(跟局域网一样),我应该在程序上做那些修改,各位编程高手帮帮忙,小弟在这先谢了,一下是部分关键代码:
{绑定}
m_sock=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==m_sock)
{
AfxMessageBox("套接字创建失败!");
return false;
}
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr=INADDR_ANY;
addr.sin_family=AF_INET;
addr.sin_port=ntohs(1341);
list.InsertString(0,"正在创建套接字,请稍后...");
list.InsertString(0,"套接字创建成功,接口:1314");
bind(m_sock,(SOCKADDR*)&addr,sizeof(SOCKADDR));
{绑定}

{接收}
char recvbuf[1000];
char tempbuf[2000];
int len=sizeof(SOCKADDR);

SOCKET sock=((RECV*)lpParameter)->sock;
HWND hwnd=((RECV*)lpParameter)->hwnd;

SOCKADDR_IN cliaddr;

int leng=sizeof(SOCKADDR);
sprintf(tempbuf,"%s 说 :%s",inet_nto

你的问题不在于程序,而在于设置问题。
主线可用,可能是因为主线是拨号端,故可以直接用。
而从线不能用,是因为从线是通过主线转发的,主线上有代理网关的程序才行。
至于QQ可用,是因为QQ有很多补教措施,有可能自动找到了代理网关的端口。
你可以查查主线连的电脑上,代理或网络设置。

不要和QQ比较 QQ用的虽然也是UDP但是是经过 更改的UDP协议(怎么改的详见MSDN好像SENDTO还是什么函数的一个参数) 也有一个交互的过程 应该改成TCP就行了

QQ 有一个所有客户端都可见的服务器.你的架构却没有.与QQ无可比性.

应该是吧》。

要打洞。

yi8