zoukankan      html  css  js  c++  java
  • 基于Python的Socket服务器和客户端通信(Pycharm)

    先说一下为什么要发这个随笔:

    最近在玩python,通过学习socket,就想试试服务器和客户端的通信。^_^

    ip和端口这俩有点东西,一顿乱整摸出点门路,也算是为我下学期的计算机网络打下了铺垫了^_^

    情景1:

    写了客户端和服务器的代码,先运行的客户端,一直在提示如下图

    相信都知道为什么了,服务器还没有先执行,都没有listen,所以出现了这种情况

    解决办法:先运行服务器的代码,再跑客户端

    情景2:

    这种情况是运行了两次服务器代码(眼神不好就不要乱运行!!)

    不要默认点运行的第一个按钮,要不总是运行的都是上一次的代码。以后一定注意。

    情景3:

    说说ip地址,通常客户端连接的是自己机器上的ipv4地址,服务器输入(0.0.0.0)就好了。

    Windows下查看在cmd中输入ipconfig

    Mac和Linux在终端中输入:ifconfig

    最后放两张运行成功的图片

    客户端:

    import socket
    client = socket.socket()
    client.connect(('10.211.55.31',8000))
    client.send("bobby".encode("utf8"))
    client.close
    服务器:

    import socket
    server= socket.socket()
    server.bind(('10.211.55.31',8000))
    server.listen()
    sock, addr = server.accept()
    data = ""
    while True:
        temp_data = sock.recv(1024)
        print(temp_data)
        if temp_data:
            data += temp_data.decode("utf8")
            if temp_data.decode("utf8").endswith("#"):
                break;
        else:
            break;
    print(data)
    sock.close

    后来改进的代码:

    客户端:

     1 import socket
     2 client = socket.socket()
     3 client.connect(('10.211.55.31',8000))
     4 
     5 while True:
     6     input_data = input()
     7     client.send(input_data.encode("utf8"))
     8     server_data = client.recv(1024)
     9     print("服务器响应:{}".format(server_data.decode("utf8")))
    10     server_data2 = client.recv(1024)
    11     print("服务器响应:{}".format(server_data2.decode("utf8")))
    12 client.close

    服务器:

     1 import socket
     2 import threading
     3 
     4 server= socket.socket()
     5 server.bind(('10.211.55.31',8000))
     6 server.listen()
     7 
     8 def hand1e_sock(sock,addr):
     9     temp_data = sock.recv(1024)
    10     print(temp_data.decode("utf8"))
    11     input_data = input()
    12     sock.send(input_data.encode("utf8"))
    13 #获取客户端的连接并启动线程去处理
    14 while True:
    15     #阻塞等待链接
    16     sock, addr = server.accept()
    17     #每当进来一个用户就启动一个线程去跟用户连接
    18     client_thread = threading.Thread(target=hand1e_sock,args=(sock,addr))
    19     client_thread .start()
    20     #注意:传递的是方法的名称而不是方法的调用
    21 data = ""
    22 while True:
    23     sock.send("welcome to server".encode("utf8"))
    24     temp_data = sock.recv(1024)
    25     print(temp_data.decode("utf8"))
    26     input_data = input()
    27     sock.send(input_data.encode("utf8"))
    28     #recv方法是阻塞的
    29     if temp_data:
    30         data += temp_data.decode("utf8")
    31         if temp_data.decode("utf8").endswith("#"):
    32             break;
    33     else:
    34         break;
    35 print(data)
    36 sock.close
     
     
     
     
     
  • 相关阅读:
    java操作生成jar包 和写入jar包
    jboss配置jndi连接池
    windows 域的LDAP查询相关举例
    LDAP error Code 及解决方法
    HDU 6417
    CF1299D Around the World
    codechef Chef and The Colored Grid
    Educational Codeforces Round 82 (Rated for Div. 2)
    CF1237F Balanced Domino Placements
    CF1254E Send Tree to Charlie
  • 原文地址:https://www.cnblogs.com/liam-sliversucks/p/13234431.html
Copyright © 2011-2022 走看看