TCP:
import socket
conn = 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 socket
conn = 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()