Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
基本Python客户端套接字示例_Python_Sockets_Networking - Fatal编程技术网

基本Python客户端套接字示例

基本Python客户端套接字示例,python,sockets,networking,Python,Sockets,Networking,我一直在试图了解套接字是如何工作的,我一直在尝试挑选一些我在一个非常简单的客户机套接字程序中找到的示例代码。因为这是基本的示例代码,所以我假设它没有错误,但是当我尝试编译它时,我得到以下错误消息 文件“client.py”,第4行,在 client_socket.connect(('localhost',5000)) 文件“”,第1行,在connect中 socket.error:[Errno 111]连接被拒绝 我几乎搜索了这个错误的每一部分,有类似问题的人似乎通过更改端口号、使用“连接”而不

我一直在试图了解套接字是如何工作的,我一直在尝试挑选一些我在一个非常简单的客户机套接字程序中找到的示例代码。因为这是基本的示例代码,所以我假设它没有错误,但是当我尝试编译它时,我得到以下错误消息

文件“client.py”,第4行,在 client_socket.connect(('localhost',5000)) 文件“”,第1行,在connect中 socket.error:[Errno 111]连接被拒绝

我几乎搜索了这个错误的每一部分,有类似问题的人似乎通过更改端口号、使用“连接”而不是“绑定”以及其他一些东西得到了帮助,但这些都不适用于我的情况。非常感谢您的帮助,因为我对网络编程非常陌生,对python也相当陌生

顺便说一句,这里是代码,以防链接因任何原因无法工作

#client example
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 5000))
while 1:
    data = client_socket.recv(512)
    if ( data == 'q' or data == 'Q'):
        client_socket.close()
        break;
    else:
        print "RECIEVED:" , data
        data = raw_input ( "SEND( TYPE q or Q to Quit):" )
        if (data <> 'Q' and data <> 'q'):
            client_socket.send(data)
        else:
            client_socket.send(data)
            client_socket.close()
            break;
#客户端示例
导入套接字
client\u socket=socket.socket(socket.AF\u INET,socket.SOCK\u流)
client_socket.connect(('localhost',5000))
而1:
data=client_socket.recv(512)
如果(数据='q'或数据='q'):
client_socket.close()
打破
其他:
打印“接收:”,数据
数据=原始输入(“发送(键入q或q退出):”)
如果(数据“Q”和数据“Q”):
客户端\u套接字发送(数据)
其他:
客户端\u套接字发送(数据)
client_socket.close()
打破

它正试图连接到端口5000上运行的计算机,但连接被拒绝。您确定有服务器正在运行吗

如果没有,您可以使用以下选项进行测试:

nc -l -k -p 5000

某些实现可能要求您省略
-p
标志。

看起来您的客户端正在尝试连接到不存在的服务器。在shell窗口中,运行:

$ nc -l 5000

在运行Python代码之前。它将充当服务器,监听端口5000,供您连接。然后,您可以在Python窗口中键入,并看到它出现在另一个终端中,反之亦然。

您可能会混淆编译和执行。Python没有编译步骤!:)只要您键入
python myprogram.py
程序就会运行,并且在您的情况下,程序会尝试连接到打开的端口5000,如果没有服务器程序在那里侦听,则会给出一个错误。听起来您熟悉两步式语言,需要编译才能生成可执行文件,因此您将Python的运行时编译(即“我找不到任何人在端口5000上侦听”)与编译时错误混淆。但是,事实上,您的Python代码很好;您只需要在运行它之前打开一个侦听器

下面是最简单的python套接字示例

服务器端:

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections

while True:
    connection, address = serversocket.accept()
    buf = connection.recv(64)
    if len(buf) > 0:
        print buf
        break
客户端:

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')
  • 首先运行SocketServer.py,并确保服务器已准备好侦听/接收sth
  • 然后客户端向服务器发送信息
  • 服务器收到某物后,它终止

    • 这是一个非常简单的套接字程序。这和套接字得到的一样简单

      用于客户端程序(CPU 1)

      您必须将第4行中的111.111.0.11替换为第二台计算机网络设置中的IP号

      用于服务器程序(CPU 2)


      先运行服务器程序,然后运行客户端程序。

      成功了!非常感谢。我对网络编程非常陌生。我没有意识到服务器必须监听客户端才能运行。现在看来,这似乎是一个不需要动脑筋的问题,但出于某种原因,我假设客户机可以自行运行。非常感谢@dukbur您需要运行服务器套接字才能使用
      client\u socket.connect
      命令将其连接到服务器。所以当服务器拒绝连接时会出现拒绝错误。我知道如何执行python程序。我想我只是把术语弄糊涂了。缺乏倾听者无疑是我的问题。谢谢你的回答!:)如何在LAN连接上跨计算机执行此操作?我有麻烦了。我清空了上面示例中的“localhost”字符串,并将“localhost”更改为“192.168.1.104”(这是服务器的本地ip地址),但它仍然不起作用。这是如何工作的?要回答上面的评论(即使这么晚)…不要在服务器端使用“localhost”(如果ping localhost,您会将其解析为127.0.0.1),而是机器的实际IP。这假设这些其他可能的原因都不会阻止通信:。使用python3时会出现一个小问题。在客户端中,由于2.x和3.x之间的字符串差异,需要将发送更改为
      clientsocket.send(bytes('hello','UTF-8'))
      (或其他编码)。(请参阅)是否应该关闭此
      套接字
      ,而不仅仅使用
      中断
      ?@通俗Python解释器肯定会讨厌它,就像在
      语法错误中一样:D@JSmyth不是用Python2@TheTromboneWilly很好的理由切换到3那么(;@JSmyth同意,还有许多其他原因!我也遇到了同样的问题,问题是我的Ubuntu计算机上没有正确配置“localhost”。我用“”替换了它,解决了这个问题。很抱歉,我在服务器程序的代码中犯了一个小错误。在第5行中,将端口号1247改为12。我已经编辑了你对corr的回答ect端口号。下次您可以使用问题左下角的编辑链接自己进行编辑。
      
      import socket
      
      s = socket.socket()
      host = '111.111.0.11' # needs to be in quote
      port = 1247
      s.connect((host, port))
      print s.recv(1024)
      inpt = raw_input('type anything and click enter... ')
      s.send(inpt)
      print "the message has been sent"
      
      import socket
      
      s = socket.socket()
      host = socket.gethostname()
      port = 1247
      s.bind((host,port))
      s.listen(5)
      while True:
          c, addr = s.accept()
          print("Connection accepted from " + repr(addr[1]))
      
          c.send("Server approved connection\n")
          print repr(addr[1]) + ": " + c.recv(1026)
          c.close()