有关python socket 多线程问题

问题描述

有关python socket 多线程问题
我现在写的程序是模拟p2p DHT 就是peer1 知道peer2 和 peer3的port 依此类推 现在我写了一个程序 打开的每个xterm端口是一个peer 窗口里可以显示ping所返回的信息
代码如下
我测试了好久 有的显示返回信息 有的显示接收信息 有的豆显示 有的根本不显示
刚学编程半年 python很多东西不了解 socket 和多线程完全是先学先用的 所以请各位看一下
到底问题出在哪里

以下是代码

import sys
import time
import socket
import threading

class peer_server(threading.Thread):
def init(self):
threading.Thread.__init__(self)
self.ID = None
self.port = None
def run(self):
print(self.port)
server_port = self.port
serverSocket = socket.socket(socket.AF_INET socket.SOCK_DGRAM)
serverSocket.bind(('' server_port))
while 1:
message clientAddress = serverSocket.recvfrom(2048)
sendMessage = 'A ping response message was received from Peer {:}'.format(self.ID)
serverSocket.sendto(sendMessage.encode('ascii') clientAddress)
print('server {:}'.format(self.ID))
print(message.decode('ascii'))
print(time.time())

class peer_client(threading.Thread):
def init(self):
threading.Thread.__init__(self)
self.ID = None
self.port1 = None
self.port2 = None

def run(self):    while 1:        server_port = self.port1        clientSocket = socket.socket(socket.AF_INET socket.SOCK_DGRAM)        sendMessage = 'A ping request message was received from Peer {:}'.format(self.ID)        clientSocket.sendto(sendMessage.encode('ascii')('' server_port))        receiveMessage serverAddress = clientSocket.recvfrom(2048)        print('client {:}'.format(self.ID))        print(receiveMessage.decode('ascii'))        print(time.time())        clientSocket.close()        server_port = self.port2        clientSocket = socket.socket(socket.AF_INET socket.SOCK_DGRAM)        clientSocket.sendto(sendMessage.encode('ascii')('' server_port))        receiveMessage serverAddress = clientSocket.recvfrom(2048)        print('client {:}'.format(self.ID))        print(receiveMessage.decode('ascii'))        print(time.time())        clientSocket.close()        time.sleep(5)

class peer(threading.Thread):
ID = None
port = None
port1 = None
port2 = None
def init(self ID fID sID):
self.ID = ID
self.port = 50000 + ID
self.port1 = 50000 + fID
self.port2 = 50000 + sID
def start_server(self):
server = peer_server()
server.ID = self.ID
server.port = self.port
server.start()
def ping(self):
client = peer_client()
client.ID = self.ID
client.port1 = self.port1
client.port2 = self.port2
client.start()

p0 = peer(int(sys.argv[1]) int(sys.argv[2]) int(sys.argv[3]))
p0.start_server()
p0.ping()

解决方案

xterm -hold -title ""Peer 1"" -e ""python3 cdht.py 1 3 4"" &
xterm -hold -title ""Peer 3"" -e ""python3 cdht.py 3 4 5"" &
xterm -hold -title ""Peer 4"" -e ""python3 cdht.py 4 5 8"" &
xterm -hold -title ""Peer 5"" -e ""python3 cdht.py 5 8 10"" &
xterm -hold -title ""Peer 8"" -e ""python3 cdht.py 8 10 12"" &
xterm -hold -title ""Peer 10"" -e ""python3 cdht.py 10 12 15"" &
xterm -hold -title ""Peer 12"" -e ""python3 cdht.py 12 15 1"" &
xterm -hold -title ""Peer 15"" -e ""python3 cdht.py 15 1 3"" &

测试的所需要的代码
在terminal输入

解决方案二:
关于python的多线程问题
python 多线程问题
Python中socket和多线程的应用

时间: 2024-10-26 23:23:53

有关python socket 多线程问题的相关文章

【Python之旅】第五篇(三):Python Socket多线程并发

 前面的几个例子都是单线程的,下面再来说说多线程的. 1.多线程模块     主要是socketserver模块,如下图示: 2.多线程原理     如下图示说明: 3.SockteServer例子说明 服务器端: 客户端: 4.演示     还是以前面例子,对代码进行修改,作如下的演示. Server端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import SocketServer            #导入SocketServer,

Python socket编程实例详解

  本文实例形式较为详细的讲述了Python socket编程.分享给大家供大家参考.具体如下: 复制代码 代码如下: sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 上面的代码创建了一个socket对象.type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字).AF_INET表示创建的是ip v4的类型. 复制代码 代码如下: socket(address_family,type,pro

Python Socket 编程——聊天室示例程序

原文:Python Socket 编程--聊天室示例程序 上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的例子,就是允许多个人同时一起聊天,每个人发送的消息所有人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.如下图: 图来自:http://www.ibm.com/de

Python Socket通讯程序例子

python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket. 客户端代码: #clietn.py if __name__ == '__main__':  #判断是否调用自己本身,如果不是则__name__为脚本名称 import socket  #导入我们所需的socket模块sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #第一步是创建socket对象.调用so

c语言socket多线程编程限制客户端连接数

      这篇文章主要介绍了c语言socket多线程编程,可以限制客户端连接数,大家参考使用吧      先上一些多线程需要使用的函数定义:     代码如下: DWORD WINAPI ProcessClientRequests(LPVOID lpParam)  //新线程将会执行的函数定义 {       return 0; }   HANDLE handler=CreateThread(NULL, 0, ProcessClientRequests, &clientsocket, 0, N

java socket多线程的时间问题

问题描述 java socket多线程的时间问题 各位大神你们好, 我正在用java写一个接收服务器数据并进行统计的程序, 我用的是多线程socket. 该程序要求能够每秒钟接收几千条数据, 数据中包含value和timestamp以及其他字段. 每个数据通过单独的连接发送, 接收之后统计每秒的钟数据的最大值与平均值(指的是数据中所含有的"value"字段的值), 并将其存储到本地. 但是使用多线程时我有个疑问, 就是怎么判断是否到了1秒. 如果使用本地时钟计算肯定会与服务器有出入,

Python中多线程及程序锁浅析_python

Python中多线程使用到Threading模块.Threading模块中用到的主要的类是Thread,我们先来写一个简单的多线程代码: 复制代码 代码如下: # coding : uft-8 __author__ = 'Phtih0n' import threading class MyThread(threading.Thread):     def __init__(self):         threading.Thread.__init__(self)     def run(sel

python学习-Python socket 聊天器

问题描述 Python socket 聊天器 用python做一个多用户的聊天器.就是指一个服务器,然后不同的电脑上开启客户端,都能连接,还可以互相传递消息.但是现在的问题是都能连接上,但相互之间不能通信.一个连接上后就把原来连接的挤掉了.该怎么解决? 解决方案 你没写端口吧,明显通讯拥挤 解决方案二: 客户端都是连接到服务器,那么数据应该是通过服务器来中转 解决方案三: python socket聊天小工具

android socket 多线程访问服务器有的时候会返回数据有的时候返回失败

问题描述 android socket 多线程访问服务器有的时候会返回数据有的时候返回失败 在写项目的时候遇到一个很棘手的问题,就是加载广告图片的时候,有多个连结同时访问服务器,在返回数据的时候总是只有一个广告线程能返回数据,另一个不能返回,需要让第二个广告线程sleep两秒以上才可以得到广告图片,是一个很纠结的问题,谢谢大神指点`package public class SocketToService { public static final Object SOCKETERROR = "#0