学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅。

先介绍下TCP的三次握手:

1,简单的发送消息:

服务器端:

import socket

sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port)
data = client.recv(1024)
print(data.decode())

这里并不能连续发送消息,一次连接发送消息后程序终止。

2.1,连续的发送消息(TCP方式)

服务器端:

import socket
import random
sk = socket.socket()
ip_port = ("127.0.0.1", 8888)
sk.bind(ip_port)
sk.listen(5)
while True:
print("正在进行等待接受数据...")
conn, address = sk.accept()
msg = "hello world!"
conn.send(msg.encode())
while True:
data=conn.recv(1024)
print(data.decode())
if data==b'exit':
break
conn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close()

客户端:

import socket

client = socket.socket()

ip_port = ("127.0.0.1", 8888)
client.connect(ip_port) while True:
data = client.recv(1024)
print(data.decode())
msg_input=input("please input mesage to send...")
client.send(msg_input.encode())
if msg_input== b'exit':
break
data = client.recv(1024)
print(data.decode())

使用while函数,来连续的发送消息。

2.2,连续的发送消息(UDP方式)

服务器端:

import  socket

#定义udp方式
sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
sk.bind(ip_port) while True:
data=sk.recv(1024)
print(data.decode())

客户端:

#udp
import socket sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ip_port=("127.0.0.1",8888)
while True:
msg_input=input("please input message to send...")
if msg_input==b'exit':
break
sk.sendto(msg_input.encode(),ip_port)
sk.close()

3,多客户端发送消息(TCP方式)

服务器端:

#tcp
import socketserver
import random class MyServer(socketserver.BaseRequestHandler):
def setup(self):
pass
def handle(self):
conn=self.request
msg="hello world!"
conn.send(msg.encode())
while True:
data= conn.recv(1024)
print(data.decode())
if data== b'exit':
break
conn.send(data)
conn.send(str(random.randint(1,1000)).encode())
conn.close() def finish(self):
pass if __name__=="__main__":
server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer)
server.serve_forever()

客户端:

#tcp
import socket client = socket.socket() ip_port = ("127.0.0.1", 8888)
client.connect(ip_port) while True:
data = client.recv(1024)
print(data.decode())
msg_input=input("please input mesage to send...")
client.send(msg_input.encode())
if msg_input== b'exit':
break
data = client.recv(1024)
print(data.decode())

启动服务器端后,服务器端等待客户端程序连接,我们可以启动多个客户端来连接服务器端。

******************************************************************************************************************************************************************************************************************************

一个小应用:

******************************************************************************************************************************************************************************************************************************

文件发送和接收程序:

服务器端(接收):

#file upload server

import socket

sk=socket.socket()

ip_port=("127.0.0.1",8888)

sk.bind(ip_port)
sk.listen(5)#最大连接数
while True:
conn,address=sk.accept()#等待连接
while True:#连接成功后一直使用当前连接,直到退出
with open("file_rec","ab") as f :
data=conn.recv(1024)
if data==b'quit':
break
f.write(data)
conn.send("success".encode())
print("file rec accomplish...")
conn.close()

客户端(发送):

#file upload
import socket sk=socket.socket()
ip_port=("127.0.0.1",8888)
sk.connect(ip_port) with open('__init__.py','rb') as f:
for i in f:
sk.send(i)
data=sk.recv(1024)
if data !=b'success':
break sk.send('quit'.encode())

注:内容来源于互联网

Python网络编程-Socket简单通信(及python实现远程文件发送)的更多相关文章

  1. Python -- 网络编程 -- Socket简单网络通信

    Qt如果多线程的话,似乎会出BUG 1.服务端(server.py) import sys, socket, threading import binascii from PyQt4 import Q ...

  2. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  3. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  4. python网络编程-socket套接字通信循环-粘包问题-struct模块-02

    前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...

  5. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  6. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  7. python --- 网络编程Socket

    网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...

  8. Day10 Python网络编程 Socket编程

    一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...

  9. python网络编程——socket基础篇

    python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...

随机推荐

  1. Mongodb系列- CRUD操作介绍

    ---恢复内容开始--- 一 Create 操作 在MongoDB中,插入操作的目标是一个集合. MongoDB中的所有写入操作在单个文档的层次上都是原子的. For examples, see In ...

  2. python3 --- locale命名空间让程序更加安全了

    [简介] 由于python-2.x 并没有locale这个层次的命名空间,所以临时变量有可能会泄漏,进而影响到了包涵它的命名空间 [看一下pyhont-2.x是怎么泄漏临时变量的] python Py ...

  3. [elk]bin/elasticsearch-sql-cli使用

    在探sql groupby语句 这个长久不用竟然忘记 part name age dep1 ara 22 dep1 arb 22 dep1 arc 22 dep2 ema 10 dep2 emc 11 ...

  4. 双网卡双线路DNS解析分析

    在企业网络维护过程中我们经常会遇到这样或那样的奇怪问题,而很多问题需要有深厚的理论知识才能解决.而随着网络的飞速发展越来越多的中小企业开始尝试通过多条线路来保证网络的畅通,一方面双网卡下的双线接入可以 ...

  5. [Memcached] telnet命令

    一:连接命令 在windows下的cmd或者Linux执行 telnet 127.0.0.1 11211 (如果此处报错"telnet不是内部或外部命令",一定是没有安装telne ...

  6. xorm中的几个坑

    项目中使用的是xorm,虽然用了很顺手了,可是还是会遇到一些坑,这里纪录一些. 结构体自动忽略空字段 在xorm中,结构体会自动忽略空字段(或则说默认值,比如int 的0 ,string的" ...

  7. caffe项目工程化封装FRCNN

    各种坑!!想要做好,一定要自己一步步试,下载别人的总会出现各种问题. 步骤如下:(可以把这些文件打包在一个文件加下,分两个文件libs,include,一定要是自己的文件) 1 首先是配置caffe的 ...

  8. 三层构架和 MVC的区别和理解

    1.三层构架和 MVC 意思一样么? Java WEB 开发中,服务端通常分为表示层.业务层.持久层,这就是所谓的三层架构: 1.表示层负责接收用户请求.转发请求.生成数据的视图等: 2.业务层负责组 ...

  9. C语言socket编程

    建议先去看一下思路 真的写的很不错呦~ 思路参考博客:https://www.cnblogs.com/renfanzi/p/5713054.html linux c语言socket编程代码(单一服务端 ...

  10. springboot-aop面向切面编程

    需求: 项目中需要记录用户操作信息,例如用户登陆系统后做了那些操作,需要有具体的日志记录. 解决办法: 1.编写操作记录日志业务类,在使用的方法中调用(一般记录方式). 2.使用面向切面方式记录日志, ...