【go】go语言socket通信样例
server.go
- package main
- import (
- "net"
- "fmt"
- "io"
- )
- const RECV_BUF_LEN =
- func main() {
- listener, err := net.Listen("tcp", "0.0.0.0:6666")//侦听在6666端口
- if err != nil {
- panic("error listening:"+err.Error())
- }
- fmt.Println("Starting the server")
- for {
- conn, err := listener.Accept() //接受连接
- if err != nil {
- panic("Error accept:"+err.Error())
- }
- fmt.Println("Accepted the Connection :", conn.RemoteAddr())
- go EchoServer(conn)
- }
- }
- func EchoServer(conn net.Conn) {
- buf := make([]byte, RECV_BUF_LEN)
- defer conn.Close()
- for {
- n, err := conn.Read(buf);
- switch err {
- case nil:
- conn.Write( buf[:n] )
- case io.EOF:
- fmt.Printf("Warning: End of data: %s \n", err);
- return
- default:
- fmt.Printf("Error: Reading data : %s \n", err);
- return
- }
- }
- }
client.go
- package main
- import (
- "fmt"
- "time"
- "net"
- )
- const RECV_BUF_LEN =
- func main() {
- conn,err := net.Dial("tcp", "127.0.0.1:6666")
- if err != nil {
- panic(err.Error())
- }
- defer conn.Close()
- buf := make([]byte, RECV_BUF_LEN)
- for i := ; i < ; i++ {
- //准备要发送的字符串
- msg := fmt.Sprintf("Hello World, %03d", i)
- n, err := conn.Write([]byte(msg))
- if err != nil {
- println("Write Buffer Error:", err.Error())
- break
- }
- fmt.Println(msg)
- //从服务器端收字符串
- n, err = conn.Read(buf)
- if err !=nil {
- println("Read Buffer Error:", err.Error())
- break
- }
- fmt.Println(string(buf[:n]))
- //等一秒钟
- time.Sleep(time.Second)
- }
- }
先执行server:
- go run server.go
在执行client:
- go run client.go
回过来看server端:
当client信息发送结束后,会在server段显示 EOF结束的字符。
另外,执行go build xxx.go在当前目录下会产生一个unit可执行文件,执行./xxx 即可执行文件。
ps: 此样例摘抄自他人,仅供go语言学习!
【go】go语言socket通信样例的更多相关文章
- Linux下C语言socket通信实现发送读取的文件内容--简单实现代码
本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...
- socket domain 样例
服务端 #include<stdio.h> #include <sys/stat.h> #include <sys/socket.h> #include <s ...
- c语言socket通信
http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html
- go语言多态接口样例
感觉比java玄幻啊~~~ package main import ( "fmt" ) type notifier interface{ notify() } type user ...
- windows下用c实现Socket通信
原文:windows下用c实现Socket通信 原本以为c是跨平台,所以,c在windows下和linux下的程序应该是类似于Java,什么都不用改变的,今儿才恍然大悟,他们的类库不一样啊-- 下面我 ...
- Swift - 使用socket进行通信(附聊天室样例)
在Swift开发中,如果我们需要保持客服端和服务器的长连接进行双向的数据通信,使用socket是一种很好的解决方案. 下面通过一个聊天室的样例来演示socket通信,这里我们使用了一个封装好的sock ...
- 【Java】Java Socket 通信演示样例
用socket(套接字)实现client与服务端的通信. 这里举两个样例: 第一种是每次client发送一个数据,服务端就做一个应答. (也就是要轮流发) 另外一种是client能够连续的向服务端发数 ...
- Python Socket 编程——聊天室演示样例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...
- socket编程——一个简单的样例
从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server client ++ ...
随机推荐
- Java命令学习系列(二)——Jstack
Java命令学习系列(二)——Jstack 2015-04-18 分类:Java 阅读(512) 评论(0) jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚 ...
- pip安装的python扩展模块自定义目录
根据系统不同: Windows是python目录下Lib\site-packages\: Linux是/usr/local/lib/python/dist-packages/.
- Xcode使用介绍
///// 应用程序文件的组织 Product Name:项目名字 Organization Name:组织机构名称 Company Identifier:公司唯一标识符 Bundle Identif ...
- 关于Unity中的帧动画组件的编写
一.帧动画 1: 美术准备好一个连续动作的离散图片;2: 程序在准确的时间来切换这个图片;3: 优点: 简单,速度快; 缺点:资源占用相对过大; 二.frame_anim组件编写 1: 代码里面强制要 ...
- 【转】【Linux】Linux 命令行快捷键
Linux 命令行快捷键 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词之间跳转 ct ...
- Java String 学习
String, 首先,String有字面值常量的概念,这个字面值常量是在编译期确定下来的,类加载时直接存入常量池(注意,常量池是类的常量池,类与类之间隔离). 而运行时生成的字符串,是不在常量池中的. ...
- Json---Windows下使用Jsoncpp
上述Json解析使用的是Jsoncpp,要使用Jsoncpp,得做如下几步的配置: 1. 首先从http://sourceforge.net/projects/jsoncpp/下载,压缩包大约105k ...
- Oracle-05-SQL语句概述、分类&SQL*PLUS概述(初识insert,desc,list,r,del,a,c,n等命令)
一.SQL语句概述 (1)SQL全程是"结构化查询语言(Structured Query Language)". SQL是大多数主流数据库系统採用的标准查询语言. (2)SQL语句 ...
- 【Java面试题】7 构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload. Constructor不能被继承,所以Constructor也就不能被override.每一个类必 ...
- WiFi(网络)调试Android手机
手机需要root 使用adb tcpip命令开启网络调试功能,一旦手机重启,又要重复这些步骤,比较麻烦. 一劳永逸的方法是,使用re管理器(给予root权限)在手机的/system/build.pro ...