1socket+threading编程之TCP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1socket+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]

 

以上是关于1socket+threading编程之TCP的主要内容,如果未能解决你的问题,请参考以下文章

廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

廖雪峰Java13网络编程-1Socket编程-2TCP编程

廖雪峰Java13网络编程-1Socket编程-1网络编程概念

10.网络编程之socket

38 - 网络编程-socketserver

网络编程之多线程——Thread对象的其他属性或方法