Python 如何使用socket.connect?

Python 如何使用socket.connect?,python,networking,Python,Networking,我是python和网络方面的新手。我应该在s.connect中输入什么地址和端口?另外,我是否在s.connect中正确使用了变量 import socket recAddress = input("What is the address of the receiver of your messages?") recPort = input("What port is the receiver using?") def mysend(sock, msg): totalsent = 0

我是python和网络方面的新手。我应该在
s.connect
中输入什么地址和端口?另外,我是否在
s.connect
中正确使用了变量

import socket
recAddress = input("What is the address of the receiver of your messages?")
recPort = input("What port is the receiver using?")
def mysend(sock, msg):
    totalsent = 0
    while totalsent < MSGLEN:
        sent = sock.send(msg[totalsent:])
        if sent == 0:
            raise RuntimeError("socket connection broken")
        totalsent = totalsent + sent

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((recAddress, recPort))

i = 2
mysend(s, str(i))
导入套接字
recAddress=input(“您的消息接收者的地址是什么?”)
recPort=input(“接收器使用的端口是什么?”)
def mysend(sock,msg):
totalsent=0
当totalsent
由于评论中解释的原因,我不会回答关于“如何知道要传递给该程序的IP和端口”的模糊问题

但是关于代码的具体问题:

另外,我是否在s.connect中正确使用了变量

差不多,但不完全一样

您可以得到如下值:

recAddress = input("What is the address of the receiver of your messages?")
recPort = input("What port is the receiver using?")
假设这是Python3.x,则返回一个字符串。但是(对于IPv4连接)需要端口号,而不是字符串。所以,你必须在某个地方转换它

您可以在输入时立即执行此操作:

recPort = int(input("What port is the receiver using?"))
…或者您可以在
connect
调用中执行此操作:

s.connect((recAddress, int(recPort)))

如果这个假设是错误的,并且您使用的是Python2.x,那么您将尝试计算输入字符串,这意味着您将获得
recPort
…的一个数字,但是您没有正确读取
recAddress
,除非您想强制用户在IP地址周围加引号

通常,您几乎不想使用
输入
;调用,如果这样做,就会得到一个字符串,所有内容都与我在上面为Python3.x描述的内容完全相同


最后,有几个旁注:

与其显式创建IPv4套接字并在其上调用
connect
,通常最好是调用。这样,如果您以后切换到与IPv6兼容的网络,您的程序仍然可以正常工作(只要用户为您提供IPv6地址或解析为IPv6地址的DNS地址)

sockets上的方法已经完成了您似乎试图用
mysend
函数手动执行的操作。虽然有时像这样显式地循环
send
可能很有用(例如,如果您试图调试错误,这意味着您可以准确地知道哪里出了问题),但通常只使用
send all
更简单


此外,在这个循环中,您使用的是一个常量
MSGLEN
,您在任何地方都没有定义它,这显然是行不通的。而且,即使您确实在某个地方定义了它,如果
len(msg)
MSGLEN
不同,您希望发生什么?例如,如果
MSGLEN
4
,而
msg
'2'
(如您的示例所示),它将发送2个字节,然后反复尝试发送0个字节。或者,如果
MSGLEN
1
,而
msg
'42'
,它将错误地发送2个字节而不是1个字节。很有可能,您想在那里使用
len(msg)
,而不是
MSGLEN

任何您想连接的
地址?我用它通过LAN发送消息。我有一台windows计算机,我想知道如何连接到另一台计算机。在哪里可以找到其他计算机的端口号和地址?在尝试发送消息之前,您可能需要阅读TCP/IP网络以及Windows计算机网络设置的详细信息。目前,对我来说,这似乎不是一个编程问题。我甚至不知道我是否正确使用局域网。我想说我想通过本地网络发送这些消息。你想连接到什么?您不能只连接到“另一台机器”,您必须连接到另一台机器上的某些服务,如web服务器、SMB文件共享服务或您编写的自定义程序。然后,端口号将是服务正在侦听的端口。我将在recAddress中输入一个IP地址。将其更改为整数将不起作用,因为地址中有句点。什么数据类型适用于它?@user3314828:IP地址应该是字符串,但端口应该是整数。(好吧,你也可以使用一个整数作为IP地址,通过将每个组件转换成一个字节,然后将它们全部转换成一个4字节的整数,但你不必这样做,也不应该……)这就是为什么
s.connect((recAddress,int(recPort))
可以正常工作的原因,但将
recPort
转换为整数。