Python || 网络编程

Python3的TCP编程:客户端功能是创建socket对象并建立TCP连接、发送请求、接收服务器返回的数据并进行处理

#导入socket库
import socket
#根据指定的IP与TCP协议创建一个socket对象
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#利用socket对象创建TCP连接
s.connect(("www.sohu.com",80))
#向服务器发送请求
s.send(b"GET / HTTP/1.1\r\nHost:www.sohu.com\r\nConnection:close\r\n\r\n")
#处理返回的数据
buffer = []
while True:
    #一次最多写入1k字节的数据
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = b"".join(buffer)
#关闭socket连接
s.close()
#将保存在内存中的数据写入磁盘
header,html = data.split(b"\r\n\r\n",1)
print(header.decode("utf-8"))
with open("sohu.html","wb") as f:
    f.write(html)

一、简单服务器

import socket
import time
import threading

#每个TCP连接都创建新的线程来处理,使服务器可以同时处理多个TCP连接
def tcplink(sock, addr):
    print("Accept new connection from %s:%s..." % addr)
    sock.send(b"Welcome!")
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        #如果没有数据传入或者传入字符串`exit`,便退出循环
        if not data or data.decode("utf-8") == "exit":
            break
        sock.send(("Hello, %s!" % data.decode("utf-8")).encode("utf-8"))
    #关闭本次socket,结束线程的调用
    sock.close()
    print("Connection from %s:%s closed." % addr)
#创建一个主Socket用来绑定并监听请求
s =socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定IP地址与监听的端口号
s.bind(("127.0.0.1", 9898))
#调用listen()方法监听端口,传入的参数指定等待连接的最大数量
s.listen(5)
print("waiting new connection...")
#服务器通过死循环来接收来自客户端的连接请求
while True:
    #accept()会等待并返回一个客户端的连接
    sock, addr = s.accept()
    #创建新线程来处理TCP连接,返回主线程,主线程继续接收连接请求
    t = threading.Thread(target=tcplink, args=(sock, addr))
    #新线程开始处理TCP连接,调用tcplink方法处理
    t.start()

二、用于测试的简单客户端

import socket
#创建socket并连接至服务器
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 9898))
print(s.recv(1024).decode("utf-8"))
#向服务器发送数据
for data in [b"Tracy", b"Mike", b"Sarah"]:
    s.send(data)
    print(s.recv(1024).decode("utf-8"))
#退出连接
s.send(b"exit")
s.close()

服务器程序会一直运行下去,等待下一个连接;客户端程序执行完毕后便退出,关闭socket


server

client
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 原文转自:Python教程 TCP/IP简介虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多。 计...
    李牧羊阅读 924评论 0 5
  • 使用网络的目的就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方。前面的学习编写的程序都是单机的,即不...
    壁花烧年阅读 1,147评论 0 0
  • 其实这个问题一直困扰我。我算是一个目的驱动型的人。所以我觉得做一件事情,当你知道为什么要去做,那么你做这件事情的时...
    爱秋刀鱼的猫阅读 593评论 1 2
  • 第一部分底层网络学习 Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活...
    Python程序媛阅读 1,281评论 0 2
  • 1 UDP 1什么是网络 ·网络就是一种辅助双方或者多方能够连接在一起的工具 ·如果没有网络可想单机的世界是多么的...
    五行缺觉阅读 405评论 0 1