golang实现tcp编程
实现简单的tcp服务
package main import (
"fmt"
"net"
) func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=,", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String())
}
}


是客户端连接服务端,实现以下功能
1. 编写一个客户端端程序,能链接到服务器端监听的端口
2. 客户端可以发送单行数据,然后退出
3. 能通过终端输入数据(输入一行发送一行),并发送给服务器端。
4.在终端输入exit,表示退出程序.
package main import (
"fmt"
"net"
) func procs(conn net.Conn) {
defer conn.Close() for {
byt := make([]byte, 512) fmt.Printf("wait %s send data\n", conn.RemoteAddr().String())
len, err := conn.Read(byt) //从conn中读取byte,会如果不发数据会阻塞 if err != nil {
fmt.Println("server err:", err)
return
} fmt.Println(string(byt[:len]))
}
} func main() { fmt.Println("服务器开始监听..") // Listen创建网络监听
listen, err := net.Listen("tcp", "127.0.0.1:9999") defer listen.Close() if err != nil {
fmt.Println("listen err=", err)
return
} for {
fmt.Println("等待客户端连接....") // Accept等待并返回下一个连接到该接口的连接,返回一个通用的网络链接
conn, err := listen.Accept() if err != nil {
fmt.Println("accpet error: ", err)
} //conn.RemoteAddr()返回远端网络地址 String():返回字符串格式的地址
fmt.Println("accpet connect: ", conn.RemoteAddr().String()) go procs(conn)
}
}
package main import (
"bufio"
"fmt"
"net"
"os"
) func main() { // 连接服务端
conn, err := net.Dial("tcp", "127.0.0.1:9999") if err != nil {
fmt.Println("conn err: ", err)
}
fmt.Println("成功:", conn) //向服务器发送数据。 reader := bufio.NewReader(os.Stdin) // 返回第一次遇到\n的所有数据,byte
str, err := reader.ReadString('\n') if err != nil {
fmt.Println("reader fail: ", err)
} len, err := conn.Write([]byte(str)) if err != nil {
fmt.Println("send data fail: ", err)
}
fmt.Printf("客户端发送了%d自己后退出", len)
}

golang实现tcp编程的更多相关文章
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- Java TCP编程
Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...
- [C# 网络编程系列]专题五:TCP编程
转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...
- python中的TCP编程学习
今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- 网络编程之TCP编程
网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...
- 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来
在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...
随机推荐
- IntegrityError at /admin/users/userprofile/add/ (1452, 'Cannot add or update a child row: a foreign key constraint fails (`mxonline`.`django_admin_log`, CONSTRAINT `django_admin_log_user_id_c564eba6_
报错现象 在执行 django 后台管理的时候添加数据导致 1452 错误 报错代码 IntegrityError at /admin/users/userprofile/add/ (1452, 'C ...
- 【Gym 100947I】What a Mess
BUPT 2017 summer training (for 16) #1D 题意 找到n个数里面有多少对具有倍数关系.\(1 ≤ n ≤ 10^4,2 ≤ a_i ≤ 10^6\) 题解 枚举一个数 ...
- 从App业务逻辑中提炼API接口
2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...
- shell getopts用法
eg:sh test.sh -u tom -p 123456: getopts的使用形式:getopts OPTION_STRING VAR: OPTION_STRING:-u,-p这种自定义选项: ...
- urllib的实现---请求响应and请求头处理
在python3中 urllib库和urilib2库合并成了urllib库..其中urllib2.urlopen()变成了urllib.request.urlopen()urllib2.Request ...
- 题解 P4512 【【模板】多项式除法】
题目地址 前言 原理有大佬写了 所以蒟蒻只讲下本题的代码细节 我看懂的大佬博客:博客地址 因为可能知道了大致的步骤还有很多细的地方不理解导致写的时候要花很久并且看到大佬们好像都是用递归写的希望能有帮助 ...
- hdu 3374 String Problem(kmp+最小表示法)
Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...
- Jupyter-Notebook服务器自定义密码
往期回顾 Anaconda安装:https://www.cnblogs.com/dotnetcrazy/p/9158715.html 基本知识导航篇:https://www.cnblogs.com/d ...
- KVM环境安装macOS Sierra
一.在macOS系统中生成ISO文件:1.在App Store中搜索.下载macOS Sierra系统. App Store --> macos --> macOS Sierra --&g ...
- Linux平台中使用PHP让word转pdf
1.ubantu下安装libreoffice sudo apt-get install libreoffice 2.命令行执行word转pdf 将 /home/wordToPdf/ ...