Go语言TCP/UDP Socket编程
1. TCP编程
TCPClient
// TCPClient project main.go
package main import (
"fmt"
"net"
"os"
) func main() {
var buf []byte
if len(os.Args) != {
fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[])
os.Exit()
}
service := os.Args[]
tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
checkErr(err)
conn, err := net.DialTCP("tcp", nil, tcpAddr)
defer conn.Close()
checkErr(err)
rAddr := conn.RemoteAddr()
n, err := conn.Write([]byte("Hello server!"))
checkErr(err)
n, err = conn.Read(buf[:])
checkErr(err)
fmt.Println("Reply from server ", rAddr.String(), string(buf[:n]))
os.Exit()
} func checkErr(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit()
}
}
TCPServer
// TCPServer project main.go
package main import (
"fmt"
"net"
"os"
) func main() {
service := ":5000"
tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
checkErr(err)
listener, err := net.ListenTCP("tcp", tcpAddr)
checkErr(err)
for {
conn, err := listener.Accept()
if err != nil {
continue
}
go handleClient(conn)
}
} func checkErr(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit()
}
} func handleClient(conn net.Conn) {
defer conn.Close()
var buf []byte
for {
n, err := conn.Read(buf[:])
if err != nil {
return
}
rAddr := conn.RemoteAddr()
fmt.Println("Receive from client", rAddr.String(), string(buf[:n]))
_, err2 := conn.Write([]byte("Welcome client!"))
if err2 != nil {
return
}
}
}
2. UDP编程
UPDClient
// UDPClient project main.go
package main import (
"fmt"
"net"
"os"
) func main() {
var buf []byte
if len(os.Args) != {
fmt.Fprintf(os.Stderr, "Usage: %s host:port ", os.Args[])
os.Exit()
}
service := os.Args[]
udpAddr, err := net.ResolveUDPAddr("udp4", service)
checkErr(err)
conn, err := net.DialUDP("udp", nil, udpAddr)
defer conn.Close()
checkErr(err)
rAddr := conn.RemoteAddr()
n, err := conn.Write([]byte("Hello server!"))
checkErr(err)
n, err = conn.Read(buf[:])
checkErr(err)
fmt.Println("Reply from server ", rAddr.String(), string(buf[:n]))
os.Exit()
} func checkErr(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit()
}
}
UDPServer
// UDPServer project main.go
package main import (
"fmt"
"net"
"os"
) func main() {
service := ":5000"
udpAddr, err := net.ResolveUDPAddr("udp4", service)
checkErr(err)
conn, err := net.ListenUDP("udp", udpAddr)
checkErr(err)
for {
handleClient(conn)
}
} func checkErr(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit()
}
} func handleClient(conn *net.UDPConn) {
defer conn.Close()
var buf []byte
for {
n, rAddr, err := conn.ReadFromUDP(buf[:])
if err != nil {
return
}
fmt.Println("Receive from client", rAddr.String(), string(buf[:n]))
_, err2 := conn.WriteToUDP([]byte("Welcome client!"), rAddr)
if err2 != nil {
return
}
}
}
Go语言TCP/UDP Socket编程的更多相关文章
- tcp/udp socket编程异同
一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 ...
- tcp udp socket编程
http://blog.csdn.net/ns_code/article/details/14128987
- TCP&UDP&Socket讲解(上)
这两天我将整理TCP&UDP&Socket,大约花大家10-15分钟之间,希望本篇文章让大家对TCP使用的理解提高一个层次. 建议大家拿出纸和笔,画一下!!! 一.TCP 1. TCP ...
- TCP UDP socket http webSocket 之间的关系
---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层
这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会 ...
- TCP/UDP,SOCKET,HTTP,FTP 简析
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- Bash Shell 下打开一个TCP / UDP SOCKET
Bash Shell 下打开一个TCP / UDP SOCKET http://jingyan.baidu.com/article/636f38bb6166c3d6b84610d1.html
- TCP/UDP网络编程的基础知识与基本示例(windows和Linux)
一.TCP编程的一般步骤 服务器端: 1.创建一个socket,用函数socket() 2.绑定IP地址.端口等信息到socket上,用函数bind() 3.开启监听,用函数listen() 4.接收 ...
随机推荐
- ASP.NET中GridView控件删除数据的两种方法
今天在用GridView控件时,发现了一个问题,就是使用GridView控件在删除数据时的问题.接下来我们通过模板列方式和CommandField方式删除某条数据讲解下两者之间的区别. 方式一:通 ...
- ios 常用第三方库要加的framework,ARC的设置
一,常用第三方库要加的framework 1,SQLite3数据库:FMDatabase 需要添加:libsqlite3.dylib 2,网络请求:ASIHTTPRequest 需要添加:CFNetw ...
- 常用dom对象
DOM:文档对象模型 --树模型 文档:标签文档,对象:文档中每个元素对象,模型:抽象化的东西 一:window: window.shuxing; 属性(值或者子对象): opener:打开当前窗口的 ...
- atitit. java queue 队列体系and自定义基于数据库的队列总结o7t
atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...
- iOS开发---集成ShareSDK实现第三方登录、分享、关注等功能。
(1)官方下载ShareSDK IOS 2.9.6,地址:http://sharesdk.mob.com/Download (2)根据实际情况,引入相关的库,参考官方文档. (3)在项目的AppDel ...
- js高仿QQ消息列表左滑功能
该组件,主要功能类似于QQ消息列表左滑出现删除.标为已读等按钮的功能:现在的版本用的是纯javaScript编写:后续会跟进 angularJs 开发的类似组件以及jquery的; 下面,就让我们来认 ...
- 纯css制作带三角border篇(兼容所有浏览器)
今天帅哥给你们介绍下,如何用 border 来制作三角. html 代码如下: 复制代码 代码如下: <div class="arrow-up"></div> ...
- JS的event对象--知识点总结
Event描述:event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. 需要注意的是:event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有 ...
- textViewDidChange: crashes in iOS 7
What's happening is that you're typing what is referred to as multistage text input, i.e. the input ...
- [转] 配置Log4j
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...