1
2
3 1、Server-TCP
4
5 #coding:utf8
6
7 '''
8
9 我是在Mac下写的代码,不知道为什么在Windows上中文显示乱码,朋友建议我更改dos窗口编码,我建议朋友放弃Windows写python
10
11 '''
12
13 from socket import socket
14
15 def response(conn,addr):
16
17 data = conn.recv(1024)
18
19 node = {'1':1,'2':2,'3':3} #这里参考我一个超级mini项目,本来是if...elif...else结构的,但是无奈选项太多,就用字典代替switch,大家参考一下这种处理问题的思路
20
21 if node.has_key(data): #判断字典中是否有data这个key
22
23 conn.send(node[data])
24
25 print 'sent server to %s:%s'%(addr[0],addr[1]) #addr不是字符串,而是一个元组
26
27 else:
28
29 conn.send('Error')
30
31 print 'Error Code'
32
33 def server():
34
35 address = ('127.0.0.1',8888)
36
37 server = socket(AF_INET,SOCK_STREAM)
38
39 server.bind(address)
40
41 server.listen(5)
42
43 '''
44
45 以上是建立socket套接字,由于是基于TCP传输的,大家都知道,TCP是可靠传输,得监听,确认连接,才发送数据
46
47 '''
48
49 while 1:
50
51 conn,addr = server.accept()
52
53 response = threading.Thread(target=response,args=(conn,addr)) #利用多线程,同时处理多个请求
54
55 response.start()
56
57 #response.join()
58
59 if __name__ == '__main__:
60 server()
61
62
63
64 Client-TCP
65
66 #coding:utf8
67
68 from socket import socket
69
70 def client(data):
71
72 addr = ('127.0.0.1',8888)
73
74 client = socket(AF_INET,SOCK_STREAM)
75
76 try:
77
78 client.connect(addr) #连接过程可能会出现异常,抛出异常
79
80 except Exception as e:
81
82 return 'Connect error:%s'%e
83
84 client.send(data) #请求服务
85
86 server_response = client.recv(2048) #服务器发送服务
87
88 return server_response
89
90 if __name__ == '__main__':
91
92 data = raw_input('please input a number')
93
94 node = {data,client(data)} #这样写的话好点,也是基于我的超级mini小项目
95
96 if node[data] == 'Error':
97
98 print 'input Error,please input again'
99
100 else :
101
102 print node[data]
103
104