Advertisement

python同时发送与接收_同时发送/接收消息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的服务器有一系列缺陷:

即使您的客户端能够随时发送信息,服务器会依次接收各个客户端的信息;当服务器等待客户端A时,其他客户端如B就可以开始发送数据,但除非客户端A已经提交了数据,否则服务器不会立即响应。

它不处理客户端断开连接。

当所有客户机都断开连接时,它进入一个繁忙的循环。

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

该系统与客户机协同工作,并采用独立线程分别处理输入与接收过程

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("")

全部评论 (0)

还没有任何评论哟~