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连接测试工具的更多相关文章

  1. [na][tools]tcp/udp连通性测试

    一 端口连通性测试意义 目的端可以使用nc来临时开一个端口,客户端用telnet来连接测试 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 测试方法 ...

  2. TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具

    在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外.       还有很多其它的网络性能测试工具.       如db, ...

  3. [tools]tcp/udp连通性测试

    一 端口连通性测试意义 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来.   二 法1 使用newclient发包,彼端tcpdump抓包观察是否能收到包 ...

  4. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    changing a readonly file (linu single user mode)

  5. Python渗透测试工具合集

    摘自:http://www.freebuf.com/tools/94777.html 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, ...

  6. python渗透测试工具集合

    作者:一起学习Python 原文链接:https://zhuanlan.zhihu.com/p/21803985 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在进行漏洞研究. ...

  7. EMQ ---100万线连接测试说明

    注解 EMQ 2.0 消息服务器默认设置,允许最大客户端连接是512,因为大部分操作系统 ‘ulimit -n’ 限制为1024. EMQ 消息服务器1.1.3版本,连接压力测试到130万线,8核心/ ...

  8. SIM7600CE TCP/IP连接与PPP拨号上网 4G上网

    SIM7600CE联网测试分为两部分: 1.TCP/IP连接 2.PPP拨号上网 实验环境:ubuntu-meta 16.04 硬件:树莓派3B,SIM7600CE 上网卡:移动的NB-IOT物联网卡 ...

  9. tcp/udp高并发和高吐吞性能测试工具

    在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...

  10. TCP/UDP简易通信

    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...

随机推荐

  1. 【逆向】使用IDA Python脚本自动化解密字符串数据

    前言 一个肚脑虫(Donot)APT组织的下载器样本,样本中的一些关键字符串数据需要使用指定函数进行动态解密.所以正好借此机会记录下怎么使用IDA Python脚本来解密字符串数据.使用IDA Pyt ...

  2. Vue中nextTick的时序问题

    前言 Vue.$nextTick这个API相信很多人都用过,按照文档的解释,"在下次DOM更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的DOM".我们通 ...

  3. Flutter showModalBottomSheet 顶部圆角

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...

  4. mac 安装 nginx 流程,并解决前端跨域问题

    mac 安装 nginx 流程 首先mac安装brew包管理工具: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN ...

  5. spark命令

    spark提交任务命令 集群方式: ./bin/spark-submit  --master spark://localhost:7077 --class 类 /home/cjj/testfile/f ...

  6. mybatis-plus 3.4.3.1 进行批量 saveOrUpdate

    service类通过 SqlHelper.saveOrUpdateBatch 实现通过自定义的 唯一索引 进行 批量保存更新 import com.baomidou.mybatisplus.core. ...

  7. 打开配置windos 2016 防火墙 日志

    1 点击"开始"或者win+R打开"运行"对话框 键入gpedit.msc

  8. win10自带录屏为什么录两个小时自动关闭?如何调节使其可以时间更长?

    Windows设置->游戏->屏幕截图->录制时间: https://www.zhihu.com/question/404390297

  9. idea修改背景颜色|护眼色|项目栏背景修改

    https://blog.csdn.net/heytyrell/article/details/89743068

  10. 怎样清空 DNS 缓存?

    在 Windows 下命令行执行:ipconfig /flushdns 在 macOS 下执行命令:sudo killall -HUP mDNSResponder