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

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

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

  2. Java TCP编程

    Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...

  3. [C# 网络编程系列]专题五:TCP编程

    转自:http://www.cnblogs.com/zhili/archive/2012/08/25/2656840.html 前言 前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来 ...

  4. python中的TCP编程学习

    今天看了一下关于python的TCP编程. 发现思路和其他语言(比如java)思路基本上差点儿相同. 先看client.基本过程例如以下: 第一步:创建一个socket 第二步:建立连接 第三步:发送 ...

  5. C#网络程序设计(3)网络传输编程之TCP编程

        网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...

  6. 【Socket编程】通过Socket实现TCP编程

    通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...

  7. JAVA 通过 Socket 实现 TCP 编程

    简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...

  8. 网络编程之TCP编程

    网络编程之TCP编程 前面已经介绍过关于TCP协议的东西,这里不做赘述.Java对于基于TCP协议的网络通信提供了良好的封装,Java使用socket对象来代表两端的通信窗口,并通过Socket产生I ...

  9. 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来

    在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...

随机推荐

  1. 洛谷P4513 小白逛公园

    区间最大子段和模板题.. 维护四个数组:prefix, suffix, sum, tree 假设当前访问节点为cur prefix[cur]=max(prefix[lson],sum[lson]+pr ...

  2. IDEA 新建 module

    maven项目可以创建多个module,在IDEA中具体操作 1.在已经建好的maven项目上右键 2.新建: 效果如下: 这时在子pom.xml中 <parent> <artifa ...

  3. socket 10060错误解决方案

    错误提示: socket 10060 无法加载或初始化请求的服务提供程序 解决方案: 打开cmd命令行工具,运行  netsh winsock reset

  4. 记OI退役

    前言 (这篇本来在联赛前写了一点,但是一直没有发布.现在退役了,还是把它发出来留作纪念吧!) 其实,这篇随笔早该在停课时就写,可是我却迟迟没有动笔. 可能是我真的太懒了,或许也是我想要逃避自己内心的真 ...

  5. Hdoj 1789 Doing Homework again 题解

    Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of h ...

  6. Android 错误提示: Can't create handler inside thread that has not called Looper.prepare()

    Can't create handler inside thread that has not called Looper.prepare() 将 Handler handler = new Hand ...

  7. 如何在TableLayout中均匀拉伸columns?

    本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文主要解决columns难以均匀拉伸的问题,不 ...

  8. tyvj/joyoi 1374 火车进出栈问题(水水版)

    我受不了了. Catalan数第100项,30000项,50000项,cnm 这tm哪里是在考数学,分明是在考高精度,FFT...... 有剧毒! 我只得写高精度,只能过100的那个题,两个进化版超时 ...

  9. HDU/HDOJ 2087 剪花布条

    KMP裸题 (极限5分钟A题) /** freopen("in.in", "r", stdin); freopen("my.out", &q ...

  10. numpy 多维数组及数组操作

    NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机 ...