linux发送tcp/udp请求

本文章介绍下通过nc工具、iperf工具和python脚本,实现发送tcp/udp请求

一、nc工具(netcat工具)

这个工具linux系统默认是自带的,以下是命令的常用参数

1.1 发送tcp请求

服务端监听端口nc -l port

客户端连接并发送请求nc -v host port

服务端收到了信息

当服务端端口未监听时,连接会报错

上面的监听方式,当从客户端或服务端退出连接时,另一端也会自动退出

如果想服务端一直监听,则需要加上-k参数

如果想将服务置于后端运行,则可通过setisid,&,nohup命令,如setsid nc -lk 8888

1.2发送udp请求

服务端监听端口nc -ul port

客户端连接并发送请求nc -uv host port

服务端收到消息

tpc是面向连接的,而udp是无连接的。所以当服务器端端口未监听时,连接也不会报错

二、iperf工具

iperf是一个网络性能测试工具,可以测试tcp/udp带宽质量等

首先要安装iperf

brew install iperf
或者
yum install iperf

常用参数:iperf --help可查看详细参数

-c/s:客户端模式/服务端模式

-p:指定iperf测试端口

-i:指定报告间隔

-u:使用udp方式

-b:设置UDP的发送带宽,单位bit/s

-t:设置测试的时长,单位为秒,不设置默认10s

-l:指定包大小,TCP默认8k,UDP默认1470字节
2.1 tcp通信
iperf -s -i 1 -p 12306
iperf -c 43.138.0.250 -p 12306 -i 1
2.2 udp通信
iperf -u -s -i 1 -p 12306
iperf -u -c 43.138.0.250 -p 12306 -i 1

三、python脚本

使用python2运行

3.1 tcp服务端脚本
# -*- coding: utf-8 -*-
# 一个简单的tcp服务器
import sys
from SocketServer import BaseRequestHandler, ThreadingTCPServer
from datetime import datetime

reload(sys)
sys.setdefaultencoding('utf8')


class EchoHandler(BaseRequestHandler):
    def handle(self):
        print('%s : Got connection from %s' % (datetime.now(), self.client_address))
        while True:
            try:
                msg = self.request.recv(8192)
                print('msg:%s' % msg)
                if not msg:
                    break
                self.request.send('receive: ' + msg)
            except Exception as e:
                pass


if __name__ == '__main__':
    serv = ThreadingTCPServer(('', 8888), EchoHandler)  # 8888为要监听的端口
    serv.serve_forever()
3.2 udp服务端脚本
# -*- coding: utf-8 -*-
# 一个简单的udp服务器
from socket import *

serverSocket = socket(AF_INET, SOCK_DGRAM)

serverSocket.bind(('', 12307))  # 12307为要监听的端口号

while True:
    msg, address = serverSocket.recvfrom(1024)
    print(msg)
    message = 'receive: ' + msg
    serverSocket.sendto(message, address)
3.3 客户端脚本
# -*- coding: utf-8 -*-
# 客户端脚本
import socket
import time
import datetime

out_data = "test test test test"  # 客户端发送内容
count = 10 # 发送数据次数 


def loop_func(l4_type, l4_host, l4_port, second):
    socket_type = {"tcp": socket.SOCK_STREAM, "udp": socket.SOCK_DGRAM}
    s = socket.socket(socket.AF_INET, socket_type.get(l4_type))
    s.connect((l4_host, l4_port))
    loop = 0
    while True:
        cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        print(cur_time)
        print('send: ' + out_data)
        s.send(out_data.encode())
        in_data = s.recv(1024)
        if len(in_data) == 0:
            s.close()
            print('server closed connection.')
        print(in_data)

        time.sleep(second)
        loop += 1
        if loop == count:
            print("time out, over")
            break


if __name__ == "__main__":
    host = 'localhost'  # host
    port = 12307  # port
    #loop_func("tcp", host, port, 1)  # tcp
    loop_func("udp", host, port, 1)  # udp每1秒发一次数据

服务端输出结果:

客户端输出结果:

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值