server client

u010861420 2013-11-05 09:01:15
我想要做客戶端後傳訊息
我想要多客戶
我開兩個Client沒辦法
Server一次只能接收和傳送一邊的資料

可能是因為我的傳送和接收不能同時進行
是缺什麼??

#!/usr/bin/env python
# -*- coding: cp950 -*-

import socket
server= ''
port = 12000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((server,port))
s.listen(300)

a=0

while True:
client,addr=s.accept()
print('IP:',addr)
if a==0:data =client.recv(1024)
print("client say:",repr(data))
a=1
if a==1:text=raw_input("key number:")
client.send(text)
a=0




#!/usr/bin/env python
# -*- coding: cp950 -*-

import socket
server= '127.0.0.1'
port = 12000

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

s.connect((server,port))
a=1

while True:
if a==1:text=raw_input("key number:")
s.send(text)
a=0
if a==0:data=s.recv(1024)
print("server say:",repr(data))
a=1
...全文
201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel_su 2013-11-08
  • 打赏
  • 举报
回复
貌似对socket没理解清楚,即使起线程强兜在一起也不是想要的结果。前面说过了,你先试试SocketServer模块,有兴趣自己写就先研读它的代码,就一个py文件代码不长,认真看...
angel_su 2013-11-08
  • 打赏
  • 举报
回复
你主要问题是没注意accept,recv,send都是阻塞式调用,服务器卡在一个点上没法同时响应多个客户端,后面虽然改为多线程,但客户端的连接却晾在一边,基本上都乱套了。试试上述手册里第一个例子当服务器,你顶楼第一次自己写的客户端,起几个去连接,应该没问题,然后研究源码(Pythonxx/Lib/SocketServer.py),看人家怎么写的...
u010861420 2013-11-08
  • 打赏
  • 举报
回复
能介紹書或是哪個網站說很清楚的嗎? http://docs.python.org/2/library/socketserver.html 這個網站看了很久還是不了解
u010861420 2013-11-07
  • 打赏
  • 举报
回复
可以連多個....但傳訊息還是只能一對一.... server
#!/usr/bin/env python
import socket
import sys
import threading
import time

server= ''
port = 12000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:
    s.bind((server,port))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit() 
s.listen(300)

def recv(sec, str):
    while 1:
		data =client.recv(1024)
		print("\n")
		print(str,repr(data))
		print("send:")
def send(sec, str):
    while 1:
		text=raw_input(str)
		client.send(text)
def connect(sec, str):
    while 1:
		client, addr = s.accept()
		print 'Connected with' 

threads = []
t = threading.Thread(target=recv, args=(1, "client"))
threads.append(t)
t = threading.Thread(target=send, args=(1, "send:\n"))
threads.append(t)
t = threading.Thread(target=connect, args=(1, "send:\n"))
threads.append(t)
while 1:
		client, addr = s.accept()
		print 'Connected with ' + addr[0] + ':' + str(addr[1])
		threads[0].start()
		threads[1].start()
		threads[2].start()
		threads[0].join()
		threads[1].join()
		threads[2].join()
client
#!/usr/bin/env python
 
import socket
import threading
import time
import sys

server= '127.0.0.1'
port = 12000

def recv(sec, str):
    while 1:
		data =s.recv(1024)
		print("\n")
		print(str,repr(data))
		print("send:")
def send(sec, str):
    while 1:
		text=raw_input(str)
		s.send(text)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
threads = []
t = threading.Thread(target=recv, args=(1, "server"))
threads.append(t)
t = threading.Thread(target=send, args=(1, "send:\n"))
threads.append(t)
try:
    s.connect((server,port))
    threads[0].start()
    threads[1].start()
    threads[0].join()
    threads[1].join()
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit() 
angel_su 2013-11-05
  • 打赏
  • 举报
回复
简单的可以试试SocketServer模块,最好研读一下该模块的py代码...

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧