博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket_Tcp_Udp
阅读量:6999 次
发布时间:2019-06-27

本文共 2835 字,大约阅读时间需要 9 分钟。

hot3.png

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

转载于:https://my.oschina.net/u/2343310/blog/1580219

你可能感兴趣的文章
springboot+kafka+elk+docker+docker-compose+centos搭建日志收集系统
查看>>
时讯无线如何满足商业区的无线覆盖?
查看>>
思科交换机根据MAC-IP信息查询具体的交换机端口
查看>>
云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)
查看>>
2014最新open***搭建实例
查看>>
php数据库链接
查看>>
nginx 反向代理,负载均衡
查看>>
安装配置msmtp和mutt
查看>>
10月下旬国内域名注册商净增量Top10
查看>>
第三代DRDS分布式SQL引擎全新发布
查看>>
Mysql查询语句优化一则
查看>>
python2读取utf8文件(中文)
查看>>
Svn 配置实例
查看>>
LVS+Keepalive的高可用群集
查看>>
Axure RP:如何使生成的原型页面左侧不带框架
查看>>
install vsftpd on Ubuntu
查看>>
tomcat下内存溢出的解决办法
查看>>
对称加密算法-PBE算法
查看>>
MySQL性能优化的最佳20+条经验
查看>>
推迟查询的执行
查看>>