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编程的更多相关文章

  1. tcp/udp socket编程异同

    一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 ...

  2. tcp udp socket编程

    http://blog.csdn.net/ns_code/article/details/14128987

  3. TCP&UDP&Socket讲解(上)

    这两天我将整理TCP&UDP&Socket,大约花大家10-15分钟之间,希望本篇文章让大家对TCP使用的理解提高一个层次. 建议大家拿出纸和笔,画一下!!! 一.TCP 1. TCP ...

  4. TCP UDP socket http webSocket 之间的关系

    ---恢复内容开始--- OSI&TCP/IP模型 要弄清tcp udp socket http websocket之间的关系,首先要知道经典的OSI七层模型,与之对应的是TCP/IP的四层模 ...

  5. TODO:Golang语言TCP/UDP协议重用地址端口

    TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...

  6. 三十天学不会TCP,UDP/IP编程--MAC地址和数据链路层

    这篇文章主要是来做(da)推(guang)介(gao)的!由于这两年接触到了比较多的这方面的知识,不想忘了,我决定把他们记录下来,所以决定在GitBook用半年时间上面写下来,这是目前写的一节,后面会 ...

  7. TCP/UDP,SOCKET,HTTP,FTP 简析

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  8. Bash Shell 下打开一个TCP / UDP SOCKET

    Bash Shell 下打开一个TCP / UDP SOCKET http://jingyan.baidu.com/article/636f38bb6166c3d6b84610d1.html

  9. TCP/UDP网络编程的基础知识与基本示例(windows和Linux)

    一.TCP编程的一般步骤 服务器端: 1.创建一个socket,用函数socket() 2.绑定IP地址.端口等信息到socket上,用函数bind() 3.开启监听,用函数listen() 4.接收 ...

随机推荐

  1. C#与数据库访问技术总结(八)之ExecuteNonQuery方法

    ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.In ...

  2. H5 Canvas刮刮乐

    玩游戏的人 很多时候都会遇到翻牌子  开宝箱. 总有人傻傻的在哪里还纠结很久到底点哪一个! 纠结  指不定翻哪一个会多一点,你明明看到那个卡片的奖项多 . 那我就告诉你好了  其实很多时候在你点开那个 ...

  3. 技巧~向URL地址添加参数

    只是个小技巧,感觉挺有用,拿出来分享一下 功能:在URL地址上添加参数,如果只有一个,会是?userid=1,需要是大于1个,会是&userid=1 实现: private string Ad ...

  4. js运动:多div变宽、二级菜单

    定时器及运动函数. 多div变宽: <!-- Author: XiaoWen Create a file: 2016-12-13 09:36:30 Last modified: 2016-12- ...

  5. paip.myeclipse7 java webservice 最佳实践o228

    paip.myeclipse7  java webservice 最佳实践o228 java的ws实现方案:jax-ws>>xfire ws的测试工具  webservice测试调用工具W ...

  6. VC多线程的用法

    .h 文件 #define WM_TEST    WM_USER + 1 class CTestThread : public CWinThread { DECLARE_DYNCREATE(CTest ...

  7. Inno setup 安装*.inf文件_示例

    nno setup 调用*.Inf文件的条目区段名称_示例 首先自己编写一个INF文件来供 Inno setup 进行测试: ;复制以下代码到记事本然后另存为123.inf .然后把123.inf文件 ...

  8. Alfred 使用简介

    1.安装(不说了去 Google 吧) 2.基础快捷键:option+space 3.打开应用程序:Alfred 几乎是一切程序的入口,你再也不需要找妈妈要开始菜单了.用快捷键呼出Alfred,输入任 ...

  9. django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录

    1.邮箱注册 这里需要扩展User,两种解决办法,1,注册时将email字段内容赋给username,这种瞒天过海型的,另一种就是扩展user,这里介绍django1.5的扩展方法. 1.settin ...

  10. Codeforces Round #292 (Div. 1) C. Drazil and Park 线段树

    C. Drazil and Park 题目连接: http://codeforces.com/contest/516/problem/C Description Drazil is a monkey. ...