1. 程式人生 > >1、socket+threading編程之TCP

1、socket+threading編程之TCP

switch resp [data]) sent 什麽 由於 ... Coding 一個

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