TCP:
import socketconn = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
conn.bind(("",8009)) conn.listen(5)content,addr = conn.accept() #创建一个连接
if content: print "{},建立连接成功,开始会话".format(addr) while True: recv_message = content.recv(512) #基于这个连接的会话 print recv_message send_message = raw_input("please input you want to said:") content.send(send_message) if send_message == "q" or send_message == "Q" or send_message == "exit": break else: print "连接失败" conn.close() import socketconn = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
conn.connect(("127.0.0.1",8009))while True:
send_message = raw_input("please input you want to said:") conn.send(send_message) #client端,是连接server,只有一个conn,直接基于conn即可 if send_message == "q" or send_message == "Q" or send_message == "exit": break rec_message = conn.recv(512) print rec_message if rec_message == "q" or rec_message == "Q" or rec_message == "exit": break conn.close() UDP: import socket conn = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) conn.bind(("",8012)) client_addr = ("10.36.1.55",8013) while True: send_message = raw_input("please input your want to said:") conn.sendto(send_message,client_addr) ##无连接的,实例绑定自己的地址,发送数据加上对法即可 if send_message == "q" or send_message == "Q" or send_message == "exit": break recv_message = conn.recvfrom(512) print "IP:{},PORT:{},MESSAGE:{}".format(recv_message[1][0], recv_message[1][1], recv_message[0]) if recv_message[0] == "q" or recv_message[0] == "Q" or recv_message[0] == "exit": break conn.close()import socket
conn = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) conn.bind(("192.192.1.34",8013)) client_addr = ("127.0.0.1",8012)while True:
recv_message = conn.recvfrom(512) print "IP:{},PORT:{},MESSAGE:{}".format(recv_message[1][0],recv_message[1][1],recv_message[0]) if recv_message[0] == "q" or recv_message[0] == "Q" or recv_message[0] == "exit": break send_message = raw_input("please input your want to said:") conn.sendto(send_message,client_addr) if send_message == "q" or send_message == "Q" or send_message == "exit": break conn.close()
SocketServer 与 socket 区别,socket同一时间段只能有一个连接会话,其他都是等待连接状态,队列的话有listen来定,SocketServer中ThreadingTCPServer是多线程的,多少个客户端连接就是多少个线程
import SocketServer exit_list = ["q","Q","exit"] class MySock(SocketServer.BaseRequestHandler): def setup(self): #相当于__init__(self) print "start" def handle(self): print self.request print self.client_address print self.server sleep_time = 0 while True: send_message = raw_input("please input your want to said:") self.request.send(send_message) rec_message = self.request.recv(512) print rec_message if rec_message in exit_list: break def finish(self): #相当于__del__(self),线程结束才会执行 print "stop"if __name__ == "__main__":
server = SocketServer.ThreadingTCPServer(("",8016),MySock) #开启多线程 server.serve_forever()