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

     

  • 相关阅读:
    CSS 仿 iOS 系统通知数字样式
    Asp.Net Grieview Eval 绑定数据 调用JS事件
    C#:decimal的去0显示
    WebService 错误:无法加载协定为xxx的终结点配置部分,因为找到了该协定的多个终结点配置
    C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错
    C#:生成短网址
    C#:优惠券代码
    C# 调用webservice 几种办法(转载)
    ASP.NET: 正在中止线程 错误原及解决方法
    IOS:Safari不兼容Javascript中的Date问题
  • 原文地址:https://www.cnblogs.com/realadmin/p/10179264.html
Copyright © 2020-2023  润新知