socket_Tcp_Udp

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()

猜你喜欢

转载自my.oschina.net/u/2343310/blog/1580219