两台计算机之间的套接字编程

时间:2018-02-16 21:41:56

标签: python sockets

我正在尝试在两台计算机之间进行通信,一台是Mac,另一台是Linux。

我在服务器端的代码:

import os
from socket import *

host = "192.168.1.47"
port = 10000
buf = 1024

address = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(address)

print ("Waiting to receive messages...")

while True:
    (data, address) = UDPSock.recvfrom(buf)
    print("Received message: " + data)
    if data == "exit":
        break

UDPSock.close()
os._exit(0)

在客户端,我有:

import os
from socket import *

host = "192.168.1.47" # set to IP address of target computer
port = 10000
addr = (host, port)

UDPSock = socket(AF_INET, SOCK_DGRAM)

while True:
    data = raw_input("Enter message to send or type 'exit': ")
    UDPSock.sendto(data, addr)
    if data == "exit":
        break

UDPSock.close()
os._exit(0)

服务器一直在等待请求,虽然我发送了一些在客户端服务器中输入的消息但是无法接收它。主机地址是我的mac ip地址,并要求另一台计算机连接到此ip。谁能帮助我理解我哪里出错了。我提到了与此主题相关的其他帖子,但没有适当的解决方案。感谢

2 个答案:

答案 0 :(得分:0)

首先:使用相同的端口:)

您正在使用localhost地址在客户端上发送消息。使用客户端的服务器地址。

对于服务器:

ip =" localhost"或者"服务器ip"

port = 10000

对于客户:

ip ="服务器ip"

port = 10000

答案 1 :(得分:0)

它在同一台主机上为我工作。因为我在字符串之前有一个“b”,因为我以字节为单位更改了字符串。

  

< string> .encode()以字节为单位更改字符串

     

< bytes> .decode()更改字符串

中的字节

您需要了解是否使用UDP,两台计算机之间没有连接。因此,如果要更改使用TCP套接字,防火墙将阻止链接。

我建议你使用python 3,如果可以的话,打印这个语法很酷:

print("{}".format(msg_recv))

您以格式(..)添加变量,它们将替换“{}”。

客户:

import os
from socket import *

host = "127.0.0.1" # set to IP address of target computer
port = 10000
addr = (host, port)

UDPSock = socket(AF_INET, SOCK_DGRAM)

while True:
    data = input("Enter message to send or type 'exit': ")
    UDPSock.sendto(data.encode(), addr)
    if data == "exit":
        break

UDPSock.close()
os._exit(0)

服务器:

import os
from socket import *

host = "127.0.0.1"
port = 10000
buf = 1024

address = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(address)

print ("Waiting to receive messages...")

while True:
    (data, address) = UDPSock.recvfrom(buf)
    print("Received message: " + data.decode())
    if data == b"exit":
        break

UDPSock.close()
os._exit(0)