繁体   English   中英

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

[英]Socket programming between two computers

我正在尝试在两台计算机之间进行通信,一台是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。 谁能帮助我了解我哪里出了问题。 我提到了与此主题相关的其他帖子,但是没有合适的解决方案。 谢谢

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

并且您正在使用本地主机地址在客户端上发送消息。 使用客户端的服务器地址。

对于服务器:

ip =“本地主机”或“服务器ip”

端口= 10000

对于客户:

ip =“服务器ip”

端口= 10000

它在同一主机上对我有用。 当字符串前有一个“ b”时,是因为我更改了以字节为单位的字符串。

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

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

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

我建议您使用python 3,并且打印此语法很酷:

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

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

客户:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM