私信  •  关注

Armali

Armali 最近创建的主题
Armali 最近回复了
5 年前
回复了 Armali 创建的主题 » python套接字中同时发送和接收的问题

服务器和客户端:

  • 不要把钥匙放在桌子上 socket.socket(socket.AF_INET,… 在一个循环中。

  • 你写错了 t1=td.Thread(target=send()) 而不是 t1=td.Thread(target=send) (因此调用而不是传递线程函数)。

  • 不要忽视与他人的脱节

        while True:
            a=s.recv(1024).decode('utf8')
    

    -宁可写

        while a:=s.recv(1024).decode('utf8'):
    

服务器:

  • 你写错了 =s.recv(1024).decode('utf8') 而不是 =c.recv(1024).decode(…) (因此尝试使用服务器而不是客户端连接套接字)。

客户:

  • 不要尝试多次启动线程。

这会产生(几乎)你的 预期产量 分三次运行:

with open("Test.txt", "a+") as f:
    f.seek(0)
    value = len(f.readlines())+1
    f.write(f"On {value}. run of code output should resemble: hash{value}\n")

如果数据文件格式与发布的格式完全相同(包括间距),则可以使用 .replace() :

        fnl = data.replace('''dmrfolder</artifactId>
    <version>1.0''', '''dmrfolder</artifactId>
    <version>somevalue''')

对于变量或不知名的格式,可以使用 re.sub() :

        fnl = re.sub('(dmrfolder</artifactId>\s*<version>)1.0', r'\1somevalue', data)
  • \s -任何空白字符,包括 \n
  • \1 -第一个(这里:唯一的)括号组
7 年前
回复了 Armali 创建的主题 » 同时发送/接收消息socket python

casper给了我多个客户端可以连接到服务器的服务器代码,但现在的问题是客户端不能相互通信。

这主要是因为你的客户想要 s_name = s.recv(1024) ,而casper的服务器不发送其名称。这是你客户的一个变种(期望 主办 和 港口 作为命令参数),它可以与casper的服务器一起工作,也可以解决您的原始问题。( 客户端一次只能发送一条消息 )通过使用单独的线程:

import socket
import sys

s = socket.socket()
s.connect((sys.argv[1], int(sys.argv[2])))
name = input(str("Please enter your username : "))
print(" Connected to chat server")
s.send(name.encode())

def receive_and_print():
    for message in iter(lambda: s.recv(1024).decode(), ''):
        print(":", message)
        print("")
import threading
background_thread = threading.Thread(target=receive_and_print)
background_thread.daemon = True
background_thread.start()

while 1:
    s.send(input("Please enter your message: ").encode())
    print("Sent")
    print("")

请注意,casper的服务器有一系列缺陷:

  1. 即使现在您的客户机可以在任何时候发送消息,服务器也会一个接一个地等待来自客户机的消息,即当它等待客户机A时,客户机B可以发送消息,但服务器只有在客户机A发送了消息后才接收和广播该消息。
  2. 它不处理客户端断开连接。
  3. 当所有客户机都断开连接时,它进入一个繁忙的循环。

有关更好的服务器示例,请参见问题 Handle multiple requests with select .

你能不能换一下我的服务器

下面是一个与此客户机一起工作的服务器变体,它还使用单独的线程进行输入和接收:

import socket
import sys

s = socket.socket()
host = socket.gethostname()
print(" server will start on host : ", host)
port = 8080
s.bind((host,port))
name = input(str("Please enter your username: "))
print("")
print("Server is waiting for incoming connections")
print("")
s.listen(1)
conn, addr = s.accept()
print("Recieved connection")
print("")
s_name = conn.recv(1024)
s_name = s_name.decode()
print(s_name, "has joined the chat room")

def input_and_send():
    while 1:
        message = name+" : "+input(str("Please enter your message: "))
        conn.send(message.encode())
        print("Sent")
        print("")
import threading
background_thread = threading.Thread(target=input_and_send)
background_thread.daemon = True
background_thread.start()

for message in iter(lambda: conn.recv(1024).decode(), ''):
    print(s_name, ":", message)
    print("")
7 年前
回复了 Armali 创建的主题 » gitpython-使用ssh密钥克隆-主机密钥验证失败

您应该使用env of clone_from。

with Git().custom_environment(GIT_SSH_COMMAND=git_ssh_cmd):
    repo = Repo.clone_from(config.url, tmpdir, branch=branch)

艾斯

git.Repo.clone_from(url, repo_dir, env={"GIT_SSH_COMMAND": 'ssh -i /PATH/TO/KEY'})