学习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. 30天自制操作系统 - 来一个hello world

    helloos.nas 源码: ; hello-os ; TAB= ; 以下这段是标准的FAT12格式软盘专用代码 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL" ...

  2. 解決中文地址Uri.IsWellFormedUriString返回false

    數字和大小寫字母都ok,但是中文地址就會有問題 public bool IslocalURL(string url) { if (string.IsNullOrEmpty(url)) { return ...

  3. Zookeeper —— 一致性协议

    一致性协议 为了解决分布式系统中存在的一致性问题,提出了一些经典的一致性协议和算法. 其中著名的有:二阶段提交协议.三阶段提交协议和 Paxos 算法. 2PC 与 3PC 2PC 2pc(Two-P ...

  4. 力导向图Demo

    <html> <head> <meta charset="utf-8"> <title>力导向图</title> < ...

  5. 【Unity/Kinect】手势识别Gesture

    在Unity的AssetStore官方商店下载Kinect v2 Examples案例包,参考KinectDemos/GestureDemo这个文件夹下的例子. 自定义一个类,实现KinectGest ...

  6. nginx学习与使用

    安装与运行 (从源码安装,这里OS为Ubuntu,参考资料:https://nginx.org/en/docs/configure.html) 1.下载并解压:https://nginx.org/en ...

  7. pyCharm最新激活码(2018激活码)

    首先输入新的License sever address 首先尝试处理方法是,针对过期会弹出激活框: 选择 Activate new license with License server (用lice ...

  8. 目前我对ReactNative的了解

    1.什么是React? 一个js组件库,不同于angular的是一个完整的framework,React需要像jQuery一样写事件监听逻辑,最大特点是Virtual DOM. 官网:https:// ...

  9. Web容器初始化过程

    一.SpringMVC启动过程 Spring的MVC是基于Servlet功能实现的,每个web工程中都有一个web.xml文件,web容器在启动的时候会加载这个配置文件,当一个web应用加载到web容 ...

  10. PGP NO_PUBKEY

    horizon@horizon-pc ~ $ sudo apt-get update Ign http://packages.linuxmint.com rebecca/upstream Transl ...