zoukankan      html  css  js  c++  java
  • 20181225 基于TCP/IP和基于UDP/IP的套接字编程

     

    一、TCP/IP的套接字编程

    服务器端代码:

    import  socket

    server = socket.socket() # 默认是基于TCP
    # 基于TCP的对象serve=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
    # 基于UDP的对象serve=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)

    server.bind(("127.0.0.1",8888))  #绑定服务器IP地址和端口

    server.listen()  #监听是否有握手请求,参数一般不写(由系统默认处理)或者不超过5个



    while True:
       client,addr = serve.accept()  #得到对方的socket对象和地址
       while True:
           try:
               data = client.recv(1024)  #1024表示应用程序的缓冲区大小,recv是从系统缓冲区读取数据到应用程序bytes
               if not data: # 如果是windows,对方强行关闭连接,会抛出异常,如果是linux,不会抛出异常,会死循环收到空的数据包。
                   print("对方已经关闭.....")
                   client.close()
                   break
               print(data.decode("utf-8"))  # 收到的数据解码并打印
               client.send(data.upper())
           except ConnectionResetError:
               print("对方异常关闭连接...")
    client.close()
               break
    server.close()

     

    用户端代码:

    import socket

    client = socket.socket()

    client.connect(("127.0.0.1",8888))

    while True:
       msg = input(">:")
       client.send(msg.encode("utf-8"))
       data = client.recv(1024)
       print("收到服务器:%s" % data.decode("utf-8"))

    client.close()

    半连接池:此处待续

     

     

    二、UDP/IP的套接字编程

    服务器端代码:

    import socket

    # UDP协议 在创建socket时只有一个类型不同(SOCK_DGRAM)
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0)

    server.bind(("127.0.0.1",8888))
    # 没有监听listen,没有accept

    while True:
       data,addr = server.recvfrom(1024) # 阻塞 直到收到数据为止
       print("收到来自%s的消息:%s" % (addr[0],data.decode("utf-8")))  # addr是元组,包含客户端IP和端口号
       # 返回值为 数据 和 对方ip地址 和端口号
       server.sendto(data.upper(),addr)

    server.close()

     

    客户端代码:

    import socket
    # 客户端也为SOCK_DGRAM
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)


    while True:
       data = input(">>:").encode("utf-8")
       client.sendto(data,("127.0.0.1",8888))  #服务器端IP与端口
       d,addr = client.recvfrom(1024)
       print(d.decode("utf-8"))

    client.close()

     

  • 相关阅读:
    【洛谷3527】[POI2011] MET-Meteors(树状数组+整体二分)
    【洛谷1580】yyy loves Easter_Egg I(字符串处理题)
    【BZOJ4866】[YNOI2017] 由乃的商场之旅(莫队)
    【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)
    【洛谷1494】[国家集训队] 小Z的袜子(莫队)
    【BZOJ3668】[NOI2014] 起床困难综合症(位运算思想)
    【BZOJ3720】Gty的妹子树(主席树+时间分块)
    【BZOJ2427】[HAOI2010] 软件安装(缩点+树形DP)
    【洛谷3648】[APIO2014] 序列分割(斜率优化DP)
    动态规划专题(五)——斜率优化DP
  • 原文地址:https://www.cnblogs.com/realadmin/p/10179264.html
Copyright © 2011-2022 走看看