观海听涛BBS's Archiver

yiyanwan77 发表于 2008-4-13 22:32

急!!TCP两地机器通讯问题!~~

开启服务器程序后
客户机IP设为127.0.0.1进行本地测试
可以正常通讯

可是把客户机程序发到同学机器上 IP换为我的地址时
通讯失败
我机器上的服务器程序收不到请求
他的客户机上显示一行多的“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫。。”最后还跟个字符笑脸[em04]

请高手不吝赐教~~~感激不尽~!![em02]

nbdxkfq 发表于 2008-4-13 23:13

楼主说的不清楚,开启服务器程序是什么程序呢?客户端和服务器端是楼主自己写的吗?

yiyanwan77 发表于 2008-4-14 09:42

开始学socket编程
照着孙鑫教程上写的
服务端代码:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
       
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
       
        wVersionRequested = MAKEWORD( 1, 1 );
        err = WSAStartup( wVersionRequested, &wsaData );
        if ( err != 0 ) {
                /* Tell the user that we could not find a usable */
                /* WinSock DLL.                                  */
                return;
        }
       
                                           
        if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1) {
                /* Tell the user that we could not find a usable */
                /* WinSock DLL.                                  */
                WSACleanup( );//终止对winsock的使用

                return;
        }
       
        SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
        SOCKADDR_IN addrSrv;
        addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_port=htons(6001);

        bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
        listen(sockSrv,5);

        SOCKADDR_IN addrClient;
        int len=sizeof(SOCKADDR);

        while(1)
        {
                SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
                char sendBuf[100];
                sprintf(sendBuf,"客户:%s连接到服务器",
                        inet_ntoa(addrClient.sin_addr));
                send(sockConn,sendBuf,strlen(sendBuf)+1,0);
                   char recvBuf[200];
                recv(sockConn,recvBuf,strlen(recvBuf),0);
                printf("%s\n",recvBuf);
                closesocket(sockConn);
        }
}

yiyanwan77 发表于 2008-4-14 09:43

客户机上代码:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
       
        WORD wVersionRequested;
        WSADATA wsaData;
        int err;
       
        wVersionRequested = MAKEWORD( 1, 1 );
        err = WSAStartup( wVersionRequested, &wsaData );
        if ( err != 0 ) {
                /* Tell the user that we could not find a usable */
                /* WinSock DLL.                                  */
                return;
        }
       
                                           
        if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1) {
                /* Tell the user that we could not find a usable */
                /* WinSock DLL.                                  */
                WSACleanup( );//终止对winsock的使用

                return;
        }
        SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

        SOCKADDR_IN addrSrv;
        addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
        addrSrv.sin_family=AF_INET;
        addrSrv.sin_port=htons(6001);
        connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

        char recvBuf[100];
        recv(sockClient,recvBuf,100,0);
        printf("%s\n",recvBuf);
        send(sockClient,"这是客户机发送的消息",strlen("这是客户机发送的消息")+1,0);

        closesocket(sockClient);
        WSACleanup();





}

yiyanwan77 发表于 2008-4-14 09:44

是什么原因啊
局域网ip用172.30那个就可以么?

hetihit 发表于 2008-4-14 09:59

有没有波特率这一说,不明白...反正单片机扩展Ethernet的时候要设置波特率....

yiyanwan77 发表于 2008-4-14 10:02

[quote]原帖由 [i]hetihit[/i] 于 2008-4-14 09:59 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1187516&ptid=101434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
有没有波特率这一说,不明白...反正单片机扩展Ethernet的时候要设置波特率.... [/quote]
[em05] 这个。。。。。
不会这么复杂吧。。。。

yiyanwan77 发表于 2008-4-14 12:02

无热心人么~~~~~~[em01]

zhendema 发表于 2008-4-14 13:39

计算机网络与通信第三版有个java版的tcp通信程序~
实现的简单功能是小写变大写~
也许,可以参考下?

yiyanwan77 发表于 2008-4-14 16:42

java的创建套接字函数是
Socket clientSocket=new Socket("hostname",6000);
书上的例子中,告诉我们怎么用
可是hostname在局域网里怎么设啊
为何无法连接呢

cox 发表于 2008-4-16 15:33

很明显是数据没传输过去,读空内存时出现乱码的现象。仔细调试一下就能解决的。

p.m 发表于 2008-4-20 17:42

TCP通讯没有波特率设置一说
现在问题是,两地通讯 (我理解为你在本校,而你同学在外地)

但你用的是内网IP,不是公网的, 和你同学通讯的时候,不可能连接上的

除非网络中心给你做端口映射

yiyanwan77 发表于 2008-4-20 18:40

[quote]原帖由 [i]p.m[/i] 于 2008-4-20 17:42 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1201247&ptid=101434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
TCP通讯没有波特率设置一说
现在问题是,两地通讯 (我理解为你在本校,而你同学在外地)

但你用的是内网IP,不是公网的, 和你同学通讯的时候,不可能连接上的

除非网络中心给你做端口映射 ... [/quote]
不是的
就是同一公寓同一层楼的啊
试了好几台机子了
都不能呢
郁闷坏了
程序难道有问题?

mongolia 发表于 2008-4-20 19:27

[quote]原帖由 [i]p.m[/i] 于 2008-4-20 17:42 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1201247&ptid=101434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
TCP通讯没有波特率设置一说
现在问题是,两地通讯 (我理解为你在本校,而你同学在外地)

但你用的是内网IP,不是公网的, 和你同学通讯的时候,不可能连接上的

除非网络中心给你做端口映射 ... [/quote]
不知道如果有了路由表行不行?

yiyanwan77 发表于 2008-4-22 10:25

[quote]原帖由 [i]p.m[/i] 于 2008-4-20 17:42 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1201247&ptid=101434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
TCP通讯没有波特率设置一说
现在问题是,两地通讯 (我理解为你在本校,而你同学在外地)

但你用的是内网IP,不是公网的, 和你同学通讯的时候,不可能连接上的

除非网络中心给你做端口映射 ... [/quote]
我用MFC重做了一遍后
局域网内通信已经可以了
但是如你所言
我要和外网同学连接
该如何做呢?
比如qq是如何实现的

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.