zoukankan      html  css  js  c++  java
  • socket实现文件间通信的基本流程

    #TCP协议实现(发送消息的顺序无要求)(以conn为对象发送和接收消息)(字节流)
    #-------serve层
    import socket
    import time
    sk=socket.socket()
    sk.bind(('10.70.2.143',8080))                       #1.服务器地址 2.服务器端口,0~65535范围,但是0~1023最好不要用
    sk.listen()                                         #监听连接(所有电话集中在这里)
    while 1:
        conn,addr=sk.accept()                           #conn为客户端的ip地址,addr为客户端的端口(开始一个一个循环接电话)
        while 1:
            str_msg=conn.recv(1024).decode('utf-8')     #1024为传递数据的大小,recv为需要和谁通信就用其recv,比如说和这个人通电话;中文解码
            print(str_msg)
            if str_msg == 'q':
                break;
            #服务器输入
            msg_s = input(">>>")
            conn.send(msg_s.encode('utf-8'))
            if msg_s == 'q':
                break;
        conn.close();                                   #可以理解为挂断这个人的电话,但是并不关闭服务器(进入下一个循环,即接听下一个电话)
    sk.close()                                          #关闭服务器(即使有其他电话打进来也毫无作用)
    
    
    
    #-------client层
    import socket
    sk = socket.socket()
    sk.connect(('10.70.2.143',8080))                        #1.服务器的IP 2.服务器的端口
    while 1:
        msg_s = input('>>>')
        sk.send(msg_s.encode('utf-8'))                      #传中文需要编码为utf-8格式
        if msg_s == 'q':
            break
        msg_r = sk.recv(1024).decode('utf-8')
        if msg_r == 'q':
            break
        print(msg_r)
    sk.close()
    
    #---------------------------------------------------------------------
    #UDP协议实现(必须是客户端先发消息)(以addr为对象发送和接收消息)(允许一个服务器同时和多个客户端通信)
    #-------server层
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)# udp协议
    sk.bind(('10.70.2.143',8080))
    while 1:
        msg_r,addr = sk.recvfrom(1024)# 接收来自于哪里的消息
        print(msg_r.decode('utf-8'),addr)
        msg_s = input(('>>>'))
        sk.sendto(msg_s.encode('utf-8'),addr)# 发给谁的消息
    sk.close()
    
    
    
    #-------client层
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    while 1:
        msg_s = input('>>>')
        sk.sendto(msg_s.encode('utf-8'),('10.70.2.143',8080))
        msg_r,addr = sk.recvfrom(1024)
        print(msg_r.decode('utf-8'))
    sk.close()
  • 相关阅读:
    JVM视角:值传递or引用传递?【转】
    mybaits trim用法
    Collections.shuffle()用法
    api缓存
    接口开发
    Integer.parseInt()和这个Integer.valueOf()的详解【转】
    MyBatis 通过包含的jdbcType类型
    idea 相关设置
    idea快捷键
    equals 与 ==
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/11719017.html
Copyright © 2011-2022 走看看