zoukankan      html  css  js  c++  java
  • Python之socket编程

    先放个题外话,了解一下OSI七层网络模型,这里放一张网上的图

    再大致了解一下socket的基本概念:

           网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。它的工作方式是这样的
    了解了大致的工作方式,主要是怎么使用!
    用socket编程时,需要做一个客户端和一个服务器端,我们先做个最简单的socket通讯模式
     1 import socket
     2 server = socket.socket()
     3 server.bind(('localhost',9999))
     4 server.listen()
     5 conn,addr = server.accept()
     6 print(conn,addr)
     7 print("开始")
     8 while True:
     9     data = conn.recv(1024)
    10     print(data.decode())
    11     conn.send(data.upper().encode())
    12 server.close()
    server端
    1 import socket
    2 client = socket.socket()
    3 client.connect(('localhost',9999))
    4 while True:
    5     msg = input('>>>').strip()
    6     client.send(msg.encode('utf-8'))
    7     data = client.recv(1024)
    8     print("recv:",data.decode())
    9 client.close()
    client端

    发送的data必须为byte的格式,(在python2中好像不太一样,忘记了!),所以要把数据encode成utf-8的格式(utf-8可以省略不写,是默认的)在收到数据后在decode一下就可以。

    这里还要注意的是int格式的数据不能encode,可以先转换成str的格式。

    都敲好以后,先运行service端,然后再运行client端,就可以试一试了!

    调试好以后我们可以稍微来个复杂一点的,把服务器放在linux里,客户端就还在pycharm里。但是要把代码稍微改一改,先启动linux,ifconfig一下

    ip是192.168.75.130,把客户端的localhost改成这个ip地址,端口号不用换

    1 import socket
    2 client = socket.socket()
    3 client.connect(('192.168.75.130',9999))
    4 while True:
    5     msg = input('>>>').strip()
    6     client.send(msg.encode('utf-8'))
    7     data = client.recv(1024)
    8     print("recv:",data.decode("utf-8"))
    9 client.close()
    client端-windows
     1 import socket
     2 server = socket.socket()
     3 server.bind(('0.0.0.0',9999))
     4 server.listen()
     5 conn,addr = server.accept()
     6 print(conn,addr)
     7 print("开始")
     8 while True:
     9     data = conn.recv(1024).decode()
    10     print(data)
    11     conn.send(data.upper().encode())
    12 server.close()
    server端-linux

    服务器端的ip地址要改成0.0.0.0

    先后运行一下,OK

     

    成功!!

    备注:linux需要对防火墙进行设置,否则有可能连接失败。设置方法

    https://www.cnblogs.com/yinsedeyinse/p/10230157.html

  • 相关阅读:
    Android SDK在线更新镜像服务器
    redis
    自动
    Java编程时部分快捷键
    问题解决路
    35
    【JavaScript 8—基础知识点】:DOM
    【JavaScript 7—基础知识点】:BOM
    【JavaScript 6—基础知识点】:正则表达式(应用)
    【JavaScript 5—基础知识点】:正则表达式(笔记)
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/10227282.html
Copyright © 2011-2022 走看看