python3实现TCP协议的简单服务器和客户端

利用python3来实现TCP协议,和UDP类似。UDP应用于及时通信,而TCP协议用来传送文件、命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱。下面代码就是模拟客户端通过命令行操作服务器。客户端输入命令,服务器执行并且返回结果。

TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP客户端

from socket import *

host  = ‘192.168.48.128‘
port  = 13141
addr = (host,port)
bufsize=1024

tcpClient = socket(AF_INET,SOCK_STREAM) # 这里的参数和UDP不一样。
tcpClient.connect(addr) #由于tcp三次握手机制,需要先连接

while True:
    data  = input(‘>>> ‘).encode(encoding="utf-8")
    if not data:
        break
    # 数据收发和UDP基本一致
    tcpClient.send(data)
    data = tcpClient.recv(bufsize).decode(encoding="utf-8")
    print(data)

tcpClient.close()

TCP客户端

from socket import *
from time import ctime
import os 

host = ‘‘
port = 13140
bufsize = 1024
addr = (host,port)

tcpServer = socket(AF_INET,SOCK_STREAM)
tcpServer.bind(addr)
tcpServer.listen(5) #这里设置监听数为5(默认值),有点类似多线程。

while True:
    print(‘Waiting for connection...‘)
    tcpClient,addr = tcpServer.accept() #拿到5个中一个监听的tcp对象和地址
    print(‘[+]...connected from:‘,addr)

    while True:
        cmd = tcpClient.recv(bufsize).decode(encoding="utf-8")
        print(‘   [-]cmd:‘,cmd)
        if not cmd:
            break
        ###这里在cmd中执行来自客户端的命令,并且将结果返回###
        cmd = os.popen(cmd) ###os.popen(cmd)对象是file对象子类,所以可以file的方法
        cmdResult = cmd.read()
        cmdStatus = cmd.close()
        #################################################
        data = cmdResult if (not cmdStatus) else "ERROR COMMAND"
        tcpClient.send(data.encode(encoding="utf-8"))

    tcpClient.close() #
    print(addr,‘End‘)
tcpServer.close() #两次关闭,第一次是tcp对象,第二次是tcp服务器

欢迎进一步交流本博文相关内容:

博客园地址 : http://www.cnblogs.com/AsuraDong/

CSDN地址 : http://blog.csdn.net/asuradong

也可以致信进行交流 : [email protected]

欢迎转载 , 但请指明出处  :  )



python3实现TCP协议的简单服务器和客户端

时间: 2024-10-19 18:48:38

python3实现TCP协议的简单服务器和客户端的相关文章

python3实现UDP协议的简单服务器和客户端

利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端.为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了. UDP:用户数据报协议,是一个面向无连接的协议.采用该协议不需要两个应用程序先建立连接.UDP协议不提供差错恢复,不能提供数据重传,因此该协议传输数据安全性差. 客户端 python3只能收发二进制数据,需要显式转码 from socket import * host = '192.168.48.128

Ubuntu利用TCP协议来获取服务器时间

Linux利用TCP协议来获取服务器时间 这里使用Unix网络编程里面的一个小程序,该客户端建立一个到服务器的TCP连接,然后读取由服务器以直观可读格式简单地送回的当前时间和日期. #include "unp.h" int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2) err_quit("u

基于TCP协议的简单Socket通信笔记(JAVA)

好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. 1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下S

【tcp-ip学习总结】使用tcp协议实现简单的通信小程序

环境:vs2013 server.c #include<Winsock2.h> #include<stdio.h> #pragma comment(lib,"Ws2_32.lib") #include<stdlib.h> void main() { WSADATA wsaData;//协议栈 struct sockaddr_in server, client;//服务端和客户端的地址 int iLen; char recMessage[1024];

tcp协议的简单理解

tpc协议属于传输层协议,本篇主要介绍下几个概念,以及握手和挥手的过程. 1.tcp的几个概念 位码:即tcp标志位,有6种提示 SYN:synchronus,表示建立联机. ACK:acknowledgement,确认. PUSH:push,传送. FIN:finish,结束. RST:rest,重置. URG:urgent,紧急. Sequence number:顺序号码. Acknowledge number:确认号码. 2.三次握手过程(假设主机A和主机B进行通信) 第一次握手:主机A发

基于TCP协议的多线程服务器

功能:客户端发送消息给服务端,服务端回显消息给客户端. server端: Client端: 测试:

Raknet实现的简单服务器与客户端的交互

1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll,  RakNet_DLL_Debug_Win32.lib这两个库文件,并将其关联到工程中. 2. 将解压目录下Source文件夹下的资源也管理到你的工程中 进行完上面两步就将网络库配置完成,下面便开始服务器端与客户端的程序编写 // 服务器端程序 #include <string> #include &

loadrunner测试TCP协议服务器性能

最近对服务器的性能感兴趣,于是开始研究了一阵子loadrunner如何做采用TCP协议交互的服务器的性能测试,对loadrunner不是很熟悉,所以一开始也走了一些弯路,现将学习的过程记录下来,为以后做参考吧. TCP协议的服务器的性能测试,我想大家都会选择loadrunner的winsocket协议进行测试,我也是采用此种方式.下面将逐一记录如何使用此协议做性能测试. 1.采用DLL文件方式进行测试 由于与服务器连接的客户端的DLL文件我手头有,同时其对应的头文件也有,所以一开始试想的是采用l

TCP 协议的作用

以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信. 但是,以太网协议不能解决多个局域网如何互通,这由 IP 协议解决. IP 协议定义了一套自己的地址规则,称为 IP 地址.它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息. 路由的原理很简单.市场上所有的路由器,背后都有很多网口,要接入多根网线.路由器内部有一张路由表,规定了 A 段 IP 地址走出口一,B 段地址走出口二,......通过这套"指路牌&quo