python socket双向通信_Socket:python中的双向通信

我想要用Python进行双向通信:

我想绑定到一个套接字,一个客户端可以连接到该套接字,然后服务器和客户端可以相互“聊天”。

我已经有了基本的听众:import socket

HOST='' #localhost

PORT=50008

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket

s.bind((HOST,PORT)) #bind to that port

s.listen(1) #listen for user input and accept 1 connection at a time.

conn, addr = s.accept()

print "The connection has been set up"

bool=1

while bool==1:

data=conn.recv(1024)

print data

if "#!END!#" in data:

print "closing the connection"

s.close()

bool=0

我现在要做的是实现一些东西,这样这个脚本也接受用户输入,在按下enter键之后,将其发送回客户机。

但我不知道怎么做?因为如果我这样做:while bool==1:

data=conn.recv(1024)

print data

u_input = raw_input("input now")

if u_input != "":

conn.send(u_input)

u_input= ""

问题是它可能挂起在用户输入提示符处,因此不允许我的客户端发送数据。

我该怎么解决?

我想把它放在一个窗口里,这能用线程解决吗?

(我从未在python中使用过线程)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python通过Socket套接字实现双向通信Socket套接字是一种编程接口,对TCP/IP的封装,它提供了网络通信的能力。在Python,可以使用socket模块来创建和使用Socket套接字。 首先,需要导入socket模块。然后,使用socket.socket()函数创建一个Socket对象,指定地址族和套接字类型。对于TCP/IP通信,常用的是AF_INET作为地址族,SOCK_STREAM作为套接字类型。接着,使用Socket对象的connect()方法连接服务器,指定服务器的IP地址和端口号。 在连接成功后,可以启动一个线程用于监听来自服务器的信息,使用recv()方法接收服务器发送的数据并进行解码。然后,可以通过send()方法发送数据给服务器。可以使用input()函数获取用户输入的内容,然后使用send()方法将输入的内容编码并发送给服务器。可以通过判断输入的内容是否为"exit"来退出通信。 需要注意的是,在进行通信前,需要确保服务器已经启动并且监听指定的IP地址和端口号。另外,需要根据具体需求对发送和接收的数据进行编码和解码操作,可以使用utf-8编码。 下面是一个示例代码,演示了如何使用Python实现Socket双向通信: ```python import socket import threading sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建Socket连接 sock.connect(('127.0.0.1', 8001)) # 连接服务器 def listen_server_txt(): while True: data = sock.recv(4096).decode('utf-8') # 接收服务器发送的信息并解码 print('接收到服务端发送的信息:%s' % data) if __name__ == '__main__': listen_server = threading.Thread(target=listen_server_txt) # 创建一个线程监听来自服务器的信息 listen_server.start() while True: input_str = input('请输入发送的内容:') if input_str == 'exit': sock.send(input_str.encode("utf-8")) # 发送退出指令给服务器 sock.close() # 关闭Socket连接 break if not input_str: print("发送内容不得为空") continue sock.send(input_str.encode("utf-8")) # 发送输入的内容给服务器 ``` 这段代码,首先创建一个Socket对象,指定服务器的IP地址和端口号进行连接。然后,启动一个线程用于监听来自服务器的信息。接着,通过输入内容来发送数据给服务器,可以通过输入"exit"来退出通信。 请根据实际情况和需求,修改代码的IP地址和端口号,以及编码和解码方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python Socket通讯](https://blog.csdn.net/qq_44278941/article/details/120850506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [基于pythonsocket通信](https://blog.csdn.net/m0_62875642/article/details/128488374)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值