Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用套接字连接linux服务器和windows客户端时出现问题_Windows_Linux_Sockets - Fatal编程技术网

使用套接字连接linux服务器和windows客户端时出现问题

使用套接字连接linux服务器和windows客户端时出现问题,windows,linux,sockets,Windows,Linux,Sockets,大家好 我正在努力学习更多关于插座以及如何使用它们的知识,我已经在一个问题上陷入了一段时间 我从Beej的网络编程指南开始,在我正在使用的linux(Fedora14)机器上制作了talker和listener。它可以工作,我可以让它互相交谈 然后我继续使用Windows(7)和教程,并将其安装并运行,可以在Windows机器上向自己发送消息。我真正做的唯一改变是使用getHostbyAddr,而不是使用名字 当我把两者粘在一起的时候,我开始遇到问题,或者说现在只有一个问题。我正在linux机器

大家好 我正在努力学习更多关于插座以及如何使用它们的知识,我已经在一个问题上陷入了一段时间

我从Beej的网络编程指南开始,在我正在使用的linux(Fedora14)机器上制作了talker和listener。它可以工作,我可以让它互相交谈

然后我继续使用Windows(7)和教程,并将其安装并运行,可以在Windows机器上向自己发送消息。我真正做的唯一改变是使用getHostbyAddr,而不是使用名字

当我把两者粘在一起的时候,我开始遇到问题,或者说现在只有一个问题。我正在linux机器上运行来自Beej的listener,我试图让Johnnie的客户端向它发送一条消息。我在windows机器上遇到一个winsock错误10061,但在linux上什么也没有出现(这并不奇怪)。我已经在linux上用防火墙测试过了,但仍然会出现这个错误

我能做些什么来解决这个问题

多谢各位

编辑以添加更多信息:

当我运行tcpdump时,我得到了这个

[root@localhost ~]# tcpdump tcp port 4950
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:08:56.246753 IP TLARGE.WIFI.schoolname.EDU.62394 > hmd46.cs.schoolname.edu.sybasesrvmon: Flags [S], seq 150153995, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
12:08:56.246794 IP hmd46.cs.schoolname.edu.sybasesrvmon > TLARGE.WIFI.schoolname.EDU.62394: Flags [R.], seq 0, ack 150153996, win 0, length 0
12:08:56.746170 IP TLARGE.WIFI.schoolname.EDU.62394 > hmd46.cs.schoolname.edu.sybasesrvmon: Flags [S], seq 150153995, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
12:08:56.746221 IP hmd46.cs.schoolname.edu.sybasesrvmon > TLARGE.WIFI.schoolname.EDU.62394: Flags [R.], seq 0, ack 1, win 0, length 0
12:08:57.246138 IP TLARGE.WIFI.schoolname.EDU.62394 > hmd46.cs.schoolname.edu.sybasesrvmon: Flags [S], seq 150153995, win 8192, options [mss 1460,nop,nop,sackOK], length 0
12:08:57.246185 IP hmd46.cs.schoolname.edu.sybasesrvmon > TONJELARGE.WIFI.schoolname.EDU.62394: Flags [R.], seq 0, ack 1, win 0, length 0
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
运行netstat给了我以下信息:

[root@localhost ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      PID/Program name   
tcp        0      0 0.0.0.0:58661               0.0.0.0:*                   LISTEN      1083/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1013/rpcbind        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1265/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1148/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1554/sendmail: acce
tcp        0      0 :::56315                    :::*                        LISTEN      1083/rpc.statd      
tcp        0      0 :::111                      :::*                        LISTEN      1013/rpcbind        
tcp        0      0 :::22                       :::*                        LISTEN      1265/sshd            
tcp        0      0 ::1:631                     :::*                        LISTEN      1148/cupsd     

这两个都来自linux机器

错误
10061
means
WSAECONNREFUSED
。在您发布的链接中,我看到客户端正在使用端口80。你确定你把它改成4950了吗

某些东西肯定是通过服务器发送的,否则它不会向您发送“我不喜欢您”
RST
(这就是拒绝连接的意思:它不仅拒绝您的连接,而且会对您造成更大的伤害)

编辑1

netstat
输出中,似乎没有人在收听
4950

编辑2

我终于开始读比吉的书了(说实话,我一直认为他的教程是最差的)。这没有引起任何警报吗?您正在创建udp套接字,这就是为什么没有人在
TCP 4950中侦听,这就是为什么您无法连接

hints.ai_socktype = SOCK_DGRAM;
您有两个选择:

  • 在windows端使用UDP套接字
  • 将服务器端的代码更改为使用
    TCP

目前的服务器代码不适用于
TCP
recvfrom
和所有这些东西),但应该很容易进行调整)。

错误
10061
意味着
WSAECONNREFUSED
。在您发布的链接中,我看到客户端正在使用端口80。你确定你把它改成4950了吗

某些东西肯定是通过服务器发送的,否则它不会向您发送“我不喜欢您”
RST
(这就是拒绝连接的意思:它不仅拒绝您的连接,而且会对您造成更大的伤害)

编辑1

netstat
输出中,似乎没有人在收听
4950

编辑2

我终于开始读比吉的书了(说实话,我一直认为他的教程是最差的)。这没有引起任何警报吗?您正在创建udp套接字,这就是为什么没有人在
TCP 4950中侦听,这就是为什么您无法连接

hints.ai_socktype = SOCK_DGRAM;
您有两个选择:

  • 在windows端使用UDP套接字
  • 将服务器端的代码更改为使用
    TCP

目前的服务器代码不适用于
TCP
recvfrom
和所有这些东西),但应该很容易调整。)

您使用的是哪些端口?你确定防火墙在Linux端没有阻塞吗?我使用的是4950(仅基于这是Beej代码中的事实),我刚刚关闭了防火墙并再次尝试,然后得到了相同的错误(使用/etc/init.d/iptables save/stop命令)。你使用的是哪些端口?你确定防火墙在Linux端没有阻塞吗?我使用的是4950(仅基于这是Beej代码中的事实),我刚刚关闭了防火墙并再次尝试,然后得到了相同的错误(使用/etc/init.d/iptables save/stop命令)。是的,我确定我做到了(这也是我在windows机器上使用的,而且它正在工作)@CraftyViking好的,只是为了确保。进入linux框,说
tcpdump tcp port 4950
。然后连接到服务器,看看会发生什么。好的,所以我试了一下,tcpdump上显示了一些东西,但侦听器上仍然没有任何东西。@CraftyViking编辑您的问题并粘贴tcpdump显示的内容。同时粘贴
netstat-tlnp在启动服务器后显示。@craftyIking似乎没有进程在该端口上侦听。我肯定是这样做的(这也是我在windows计算机上使用的,它正在工作)@CraftyViking好的,只是为了确保。进入linux框,说
tcpdump tcp port 4950
。然后连接到服务器,看看会发生什么。好的,所以我试了一下,tcpdump上显示了一些东西,但侦听器上仍然没有任何东西。@CraftyViking编辑您的问题并粘贴tcpdump显示的内容。同时粘贴
netstat-tlnp在启动服务器后显示。@CraftyViking似乎没有进程在该端口上侦听