1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
服务端
#_*_ coding:utf-8 _*_
 
#导入socket模块
import  socket
 
# 创建socket对象
sk  =  socket.socket()
 
#绑定侦听的IP和端口号
ip_port  =  ( '192.168.9.213' , 9999 )
sk.bind(ip_port)
 
#最大连接数
sk.listen( 5 )
 
 
#接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口
#通过while循环,让服务端一直接受客户端请求
 
print  "正在等待客户端请求"
while  True :
     conn ,address  =  sk.accept()  # conn变量存储的是客户端的socket对象(conn就是客户端),变量address存储的是客户端的IP地址和端口
     print  "已发生请求的客户端,IP:%s 端口:%s"  %  (address[ 0 ], address[ 1 ])
     #给客户端发一条信息内容
     conn.send( 'hello word!' )     #给客户端发送消息
 
     #一直侦听客户端发送过来的消息
     while  True :
         client_data  =  conn.recv( 1024 #接受客户端发送过来的消息
         print  client_data
         if  client_data  = =  'exit' :
             break
         conn.send( 'sb' #向客户端发送消息
     conn.close()
客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#_*_ coding:utf-8 _*_
 
#导入socket模块
import  socket
 
#创建socket对象
client  =  socket.socket()
 
#连接服务器
ip_port  =  ( '192.168.9.213' , 9999 )
client.connect(ip_port)  #和服务端建立连接
 
while  True :
     #获取数据
     data  =  client.recv( 1024 )     #接受服务端发送过来的消息
     print  data   #打印服务端发送过来的消息
 
     #向服务端发送消息
     inp  =  raw_input ( 'client data:' )
     client.send(inp)   # 向服务端发送消息
     if  inp  = =  'exit' :
         break


执行过程


执行过程
1、服务端侦听
2、客户端和服务端建立连接
3、服务端向客户端发送一条消息“hello world!”
4、客户端接受消息
5、接着,客户端可以输入消息,发送给服务端
6、服务端接收客户端发送过来的消息
7、然后向客户端发送一条消息“sb”

8、客户端接收消息
9、客户端可以输入消息,发送给服务端
10、服务端接收客户端发送过来的消息
11、然后向客户端发送一条消息“sb”

12....一直循环
直到客户端输入的是“exit”发送给服务端
服务端判断,如果客户端发送过来的消息是exit,那么就停止侦听客户端发送过来的消息,这时候客户端也和服务端断开连接



补充一个服务端,实现可以同时处理多个客户端请求(异步多线程服务端)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#_*_ coding:utf-8 _*_
 
import  SocketServer
 
class  MyServer(SocketServer.BaseRequestHandler):
     def  setup( self ):
         pass
 
     def  handle( self ):
         #print self.request,self.client_address,self.server
         conn  =  self .request
         conn.send( 'hello word!' )   #给客户端发一条信息内容
 
         # 一直侦听客户端发送过来的消息
         flag  =  True
         while  flag:
             client_data  =  conn.recv( 1024 )    #接受客户端发送过来的消息,1024代表最多只能在缓冲区拿数据的大小,缓冲区默认为8K
             print  client_data
             conn.send( 'sb' )   # 向客户端发送消息
             if  client_data  = =  'exit' :
                 print  '连接的客户端已断开'
                 flag  =  False
         conn.close()
 
     def  finish( self ):
         pass
if  __name__  = =  "__main__" :
     server  =  SocketServer.ThreadingTCPServer(( '192.168.9.213' , 9999 ),MyServer)  #侦听的IP和端口号
     server.serve_forever()