server.go

  1. package main
  2.  
  3. import (
  4. "net"
  5. "fmt"
  6. "io"
  7. )
  8.  
  9. const RECV_BUF_LEN =
  10.  
  11. func main() {
  12. listener, err := net.Listen("tcp", "0.0.0.0:6666")//侦听在6666端口
  13. if err != nil {
  14. panic("error listening:"+err.Error())
  15. }
  16. fmt.Println("Starting the server")
  17.  
  18. for {
  19. conn, err := listener.Accept() //接受连接
  20. if err != nil {
  21. panic("Error accept:"+err.Error())
  22. }
  23. fmt.Println("Accepted the Connection :", conn.RemoteAddr())
  24. go EchoServer(conn)
  25. }
  26. }
  27.  
  28. func EchoServer(conn net.Conn) {
  29. buf := make([]byte, RECV_BUF_LEN)
  30. defer conn.Close()
  31.  
  32. for {
  33. n, err := conn.Read(buf);
  34. switch err {
  35. case nil:
  36. conn.Write( buf[:n] )
  37. case io.EOF:
  38. fmt.Printf("Warning: End of data: %s \n", err);
  39. return
  40. default:
  41. fmt.Printf("Error: Reading data : %s \n", err);
  42. return
  43. }
  44. }
  45. }

client.go

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. "net"
  7. )
  8.  
  9. const RECV_BUF_LEN =
  10.  
  11. func main() {
  12. conn,err := net.Dial("tcp", "127.0.0.1:6666")
  13. if err != nil {
  14. panic(err.Error())
  15. }
  16. defer conn.Close()
  17.  
  18. buf := make([]byte, RECV_BUF_LEN)
  19.  
  20. for i := ; i < ; i++ {
  21. //准备要发送的字符串
  22. msg := fmt.Sprintf("Hello World, %03d", i)
  23. n, err := conn.Write([]byte(msg))
  24. if err != nil {
  25. println("Write Buffer Error:", err.Error())
  26. break
  27. }
  28. fmt.Println(msg)
  29.  
  30. //从服务器端收字符串
  31. n, err = conn.Read(buf)
  32. if err !=nil {
  33. println("Read Buffer Error:", err.Error())
  34. break
  35. }
  36. fmt.Println(string(buf[:n]))
  37.  
  38. //等一秒钟
  39. time.Sleep(time.Second)
  40. }
  41. }

先执行server:

  1. go run server.go

在执行client:

  1. go run client.go

回过来看server端:

当client信息发送结束后,会在server段显示 EOF结束的字符。

另外,执行go build xxx.go在当前目录下会产生一个unit可执行文件,执行./xxx 即可执行文件。

ps: 此样例摘抄自他人,仅供go语言学习!

【go】go语言socket通信样例的更多相关文章

  1. Linux下C语言socket通信实现发送读取的文件内容--简单实现代码

    本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...

  2. socket domain 样例

    服务端 #include<stdio.h> #include <sys/stat.h> #include <sys/socket.h> #include <s ...

  3. c语言socket通信

    http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html

  4. go语言多态接口样例

    感觉比java玄幻啊~~~ package main import ( "fmt" ) type notifier interface{ notify() } type user ...

  5. windows下用c实现Socket通信

    原文:windows下用c实现Socket通信 原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊-- 下面我 ...

  6. Swift - 使用socket进行通信(附聊天室样例)

    在Swift开发中,如果我们需要保持客服端和服务器的长连接进行双向的数据通信,使用socket是一种很好的解决方案. 下面通过一个聊天室的样例来演示socket通信,这里我们使用了一个封装好的sock ...

  7. 【Java】Java Socket 通信演示样例

    用socket(套接字)实现client与服务端的通信. 这里举两个样例: 第一种是每次client发送一个数据,服务端就做一个应答. (也就是要轮流发) 另外一种是client能够连续的向服务端发数 ...

  8. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  9. socket编程——一个简单的样例

    从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client ++ ...

随机推荐

  1. Java命令学习系列(二)——Jstack

    Java命令学习系列(二)——Jstack 2015-04-18 分类:Java 阅读(512) 评论(0) jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚 ...

  2. pip安装的python扩展模块自定义目录

    根据系统不同: Windows是python目录下Lib\site-packages\: Linux是/usr/local/lib/python/dist-packages/.

  3. Xcode使用介绍

    ///// 应用程序文件的组织 Product Name:项目名字 Organization Name:组织机构名称 Company Identifier:公司唯一标识符 Bundle Identif ...

  4. 关于Unity中的帧动画组件的编写

    一.帧动画 1: 美术准备好一个连续动作的离散图片;2: 程序在准确的时间来切换这个图片;3: 优点: 简单,速度快; 缺点:资源占用相对过大; 二.frame_anim组件编写 1: 代码里面强制要 ...

  5. 【转】【Linux】Linux 命令行快捷键

    Linux 命令行快捷键 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词之间跳转 ct ...

  6. Java String 学习

    String, 首先,String有字面值常量的概念,这个字面值常量是在编译期确定下来的,类加载时直接存入常量池(注意,常量池是类的常量池,类与类之间隔离). 而运行时生成的字符串,是不在常量池中的. ...

  7. Json---Windows下使用Jsoncpp

    上述Json解析使用的是Jsoncpp,要使用Jsoncpp,得做如下几步的配置: 1. 首先从http://sourceforge.net/projects/jsoncpp/下载,压缩包大约105k ...

  8. Oracle-05-SQL语句概述、分类&amp;SQL*PLUS概述(初识insert,desc,list,r,del,a,c,n等命令)

    一.SQL语句概述 (1)SQL全程是"结构化查询语言(Structured Query Language)". SQL是大多数主流数据库系统採用的标准查询语言. (2)SQL语句 ...

  9. 【Java面试题】7 构造器Constructor是否可被override?

    构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload. Constructor不能被继承,所以Constructor也就不能被override.每一个类必 ...

  10. WiFi(网络)调试Android手机

    手机需要root 使用adb tcpip命令开启网络调试功能,一旦手机重启,又要重复这些步骤,比较麻烦. 一劳永逸的方法是,使用re管理器(给予root权限)在手机的/system/build.pro ...