1、socket+threading編程之TCP
1、Server-TCP
#coding:utf8
‘‘‘
我是在Mac下寫的代碼,不知道為什麽在Windows上中文顯示亂碼,朋友建議我更改dos窗口編碼,我建議朋友放棄Windows寫python
‘‘‘
from socket import socket
def response(conn,addr):
data = conn.recv(1024)
node = {‘1‘:1,‘2‘:2,‘3‘:3} #這裏參考我一個超級mini項目,本來是if...elif...else結構的,但是無奈選項太多,就用字典代替switch,大家參考一下這種處理問題的思路
if node.has_key(data): #判斷字典中是否有data這個key
conn.send(node[data])
print ‘sent server to %s:%s‘%(addr[0],addr[1]) #addr不是字符串,而是一個元組
else:
conn.send(‘Error‘)
print ‘Error Code‘
def server():
address = (‘127.0.0.1‘,8888)
server = socket(AF_INET,SOCK_STREAM)
server.bind(address)
server.listen(5)
‘‘‘
以上是建立socket套接字,由於是基於TCP傳輸的,大家都知道,TCP是可靠傳輸,得監聽,確認連接,才發送數據
‘‘‘
while 1:
conn,addr = server.accept()
response = threading.Thread(target=response,args=(conn,addr)) #利用多線程,同時處理多個請求
response.start()
#response.join()
if __name__ == ‘__main__:
server()
Client-TCP
#coding:utf8
from socket import socket
def client(data):
addr = (‘127.0.0.1‘,8888)
client = socket(AF_INET,SOCK_STREAM)
try:
client.connect(addr) #連接過程可能會出現異常,拋出異常
except Exception as e:
return ‘Connect error:%s‘%e
client.send(data) #請求服務
server_response = client.recv(2048) #服務器發送服務
return server_response
if __name__ == ‘__main__‘:
data = raw_input(‘please input a number‘)
node = {data,client(data)} #這樣寫的話好點,也是基於我的超級mini小項目
if node[data] == ‘Error‘:
print ‘input Error,please input again‘
else :
print node[data]
1、socket+threading編程之TCP