go简易tcp/udp连接测试工具
package main import (
"fmt"
"io"
"log"
"net"
"os"
) func showBytes(bytes []byte) string {
var str []byte
for _, b := range bytes {
if b >= 33 && b <= 126 && b != 92 {
str = append(str, b)
} else {
str = append(str, fmt.Sprintf("\\%02X", b)...)
}
}
return string(str)
} func writeAllTCP(con *net.TCPConn, message []byte) error {
defer con.CloseWrite()
for len(message) > 0 {
l, err := con.Write(message)
if err != nil {
return err
}
message = message[l:]
}
return nil
} func handleTCP(client *net.TCPConn, message []byte) {
defer client.Close()
addrStr := client.RemoteAddr().String()
log.Printf("Client %s connected\n", addrStr)
var data [1024]byte
n, err := io.ReadFull(client, data[:])
if err != nil && err != io.ErrUnexpectedEOF {
log.Printf("Failed to read: %v\n", err)
return
}
log.Printf("From %s: %s\n", addrStr, showBytes(data[:n]))
if err := writeAllTCP(client, message); err != nil {
log.Printf("Failed to write: %v\n", err)
return
}
} func main() {
if len(os.Args) != 5 || os.Args[1] != "tcp" && os.Args[1] != "udp" || os.Args[2] != "server" && os.Args[2] != "client" {
fmt.Fprintf(os.Stderr, "Usage: %s tcp|udp server|client <server address> <message>\n", os.Args[0])
os.Exit(1)
}
if os.Args[1] == "tcp" {
addr, err := net.ResolveTCPAddr("tcp", os.Args[3])
if err != nil {
panic(err)
}
if os.Args[2] == "server" {
con, err := net.ListenTCP("tcp", addr)
if err != nil {
panic(err)
}
defer con.Close()
for {
client, err := con.AcceptTCP()
if err != nil {
log.Printf("Failed to accept: %v\n", err)
continue
}
go handleTCP(client, []byte(os.Args[4]))
}
} else {
con, err := net.DialTCP("tcp", nil, addr)
if err != nil {
panic(err)
}
defer con.Close()
if err := writeAllTCP(con, []byte(os.Args[4])); err != nil {
panic(err)
}
var data [1024]byte
n, err := io.ReadFull(con, data[:])
if err != nil && err != io.ErrUnexpectedEOF {
panic(err)
}
fmt.Println(showBytes(data[:n]))
}
} else {
addr, err := net.ResolveUDPAddr("udp", os.Args[3])
if err != nil {
panic(err)
}
if os.Args[2] == "server" {
con, err := net.ListenUDP("udp", addr)
if err != nil {
panic(err)
}
defer con.Close()
for {
var data [1024]byte
n, addr, err := con.ReadFromUDP(data[:])
if err != nil {
log.Printf("Failed to read: %v\n", err)
continue
}
log.Printf("From %v: %s\n", addr, showBytes(data[:n]))
_, err = con.WriteTo([]byte(os.Args[4]), addr)
if err != nil {
log.Printf("Failed to write: %v\n", err)
continue
}
}
} else {
con, err := net.DialUDP("udp", nil, addr)
if err != nil {
panic(err)
}
defer con.Close()
_, err = con.Write([]byte(os.Args[4]))
if err != nil {
panic(err)
}
var data [1024]byte
n, _, err := con.ReadFromUDP(data[:])
if err != nil {
panic(err)
}
fmt.Println(showBytes(data[:n]))
}
}
}
https://gitee.com/thhh_sunny/go-net-hello?_from=gitee_search
https://gitee.com/YePitfall/socket-programming/tree/master/udpclient
go简易tcp/udp连接测试工具的更多相关文章
- [na][tools]tcp/udp连通性测试
一 端口连通性测试意义 目的端可以使用nc来临时开一个端口,客户端用telnet来连接测试 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 测试方法 ...
- TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外. 还有很多其它的网络性能测试工具. 如db, ...
- [tools]tcp/udp连通性测试
一 端口连通性测试意义 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 法1 使用newclient发包,彼端tcpdump抓包观察是否能收到包 ...
- linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms
changing a readonly file (linu single user mode)
- Python渗透测试工具合集
摘自:http://www.freebuf.com/tools/94777.html 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, ...
- python渗透测试工具集合
作者:一起学习Python 原文链接:https://zhuanlan.zhihu.com/p/21803985 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在进行漏洞研究. ...
- EMQ ---100万线连接测试说明
注解 EMQ 2.0 消息服务器默认设置,允许最大客户端连接是512,因为大部分操作系统 ‘ulimit -n’ 限制为1024. EMQ 消息服务器1.1.3版本,连接压力测试到130万线,8核心/ ...
- SIM7600CE TCP/IP连接与PPP拨号上网 4G上网
SIM7600CE联网测试分为两部分: 1.TCP/IP连接 2.PPP拨号上网 实验环境:ubuntu-meta 16.04 硬件:树莓派3B,SIM7600CE 上网卡:移动的NB-IOT物联网卡 ...
- tcp/udp高并发和高吐吞性能测试工具
在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
随机推荐
- tensorflow 模型批处理参数tensor快速赋值参考
批处理调用模型的时候,如果逐像素给tensor对象数据部分赋值的话,效率是很低的,尤其是对于一些图片数据,所以数据块直接拷贝可以大大提高效率, 先取得数据指针: output_tensor->f ...
- 数论之GCD+LCM+扩展欧几里得
最大公约数GCD 整数a和b的最大公约数记为gcd(a,b) <1 经典的欧几里得算法,辗转相除法 int gcd(int a, int b){ return b == 0 ? a : gcd( ...
- JAVA实现中英文混合文字友好截取功能
package com.xxx.utils; import com.google.common.collect.Lists; import java.util.List; /** * 字符工具类 */ ...
- 【python】第一模块 步骤五 第一课、内存管理机制
第一课.内存管理机制 一.课程介绍 1.1 课程概要 课程概要 赋值语句的内存分析 垃圾回收机制 内存管理机制 课程目标 掌握赋值语句内存分析方法 掌握id()和is()的使用 了解python的垃圾 ...
- snpEFF注释的vcf文件转化成maf文件
利用一个perl语言写的工具:snpeffTomaf 一行代码即可实现非常方便 github地址链接:https://github.com/tsy19900929/snpeffToMaf 将此仓库中的 ...
- js-var,let ,const 的区别
变量提升: 在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序. 函数字面量表达式不会被提升 var a = function(){}; ex: console.log(a) ...
- 关于IllegalMonitorStateException异常的解释之一
注意 在同步控制方法或同步控制块里调用wait(),notify()和notifyAll().如果在非同步控制方法里调用这些方法,程序能通过编译,但运行的时候,将得到IllegalMonitorSta ...
- 搭建sftp服务器
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1. 创建sftp组 # groupadd sftp 创建完成之后使用ca ...
- 微信端手机跨域上传图片偶尔跑进error
如题.我这两天被这个问题搞得焦头烂额.其他端都没问题,就微信端的有问题,就是因为通过ajax上传图片的时候,设置了 async: false,然后客户用了测试总是跑进error,客户问什么情况,我也找 ...
- SpringMVC配置文件applicationContext.xml头信息
applicationContext.xml头信息 <?xml version="1.0" encoding="UTF-8"?> <beans ...