go中实现一个tcp服务,首先是要监听端口,接收请求,这个地方会被阻塞等待
当客户端连接过来,会开一个grountine去处理这条客户端的tcp连接,因此可以同时处理多条连接

在连接中,要循环的去读取客户端传递过来的数据,这样就可以不停的处理客户端的请求数据
在读取数据的时候,每次我只读一个字节,这样方便查看接收到什么数据,因此读取数据的时候也要循环,拼接收到的数据,在这个循环中如果读取大小为0或者读取的这个字节为\n时,我就退出循环。

因为\n的ascii编码为10,所以我收到的这一个字节切片的数据tmpByte[0]为10的时候就断掉

可以通过下面代码的运行看一下收取到的数据,客户端传递一个英文字符,和传递一个中文字符所收取到的具体数据,参照ascii对照表

客户端传递:a
服务端收到:
1 [97] 一个字节,ascii编码为97,对应 a
1 [13] 一个字节,ascii编码为13,对应 控制字符CR,归位键
1 [10] 一个字节,ascii编码为10,对应 控制字符LF,换行键

客户端传递:你
服务端收到:
1 [228] 三个字节
1 [189]
1 [160]
1 [13] 下面这俩和上面的意思一样
1 [10]

ascii编码下,一个英文字符一个字节,utf8编码下,一个中文字符三个字节

完整代码:

package main

import (
"fmt"
"net"
) func main() {
//监听端口
listener, _ := net.Listen("tcp", "0.0.0.0:5921")
//循环阻塞接收,并发处理同时处理多个连接
for {
conn, _ := listener.Accept()
go handleConn(conn)
}
}
func handleConn(conn net.Conn) {
//循环不停的去处理数据
for {
tmpByte := make([]byte, )
var resData []byte
//循环去读取数据
for {
len, _ := conn.Read(tmpByte)
fmt.Println(len, tmpByte)
//读到的长度为0,或者读取到换行就断掉
if len == || tmpByte[] == {
break
}
//拼接读到的数据
resData = append(resData, tmpByte...) }
str := fmt.Sprintf("收到:%s\n", string(resData))
conn.Write([]byte(str))
}
}

[Go] tcp服务下的数据传递的更多相关文章

  1. 在TCP协议下的数据传送

    本人小白菜逼一枚,,,,刚建立博客,也写不了太深入的,就写点上课的笔记什么的.有错误希望广大博友指出,我一定虚心学习接收改正. 我的新浪邮箱:liudaohui0805@sina.com 我的QQ邮箱 ...

  2. TCP 服务端接收数据解析工具类

    package com.ivchat.common.util; import java.io.BufferedReader;import java.io.IOException;import java ...

  3. TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q

    TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q 一.TCP协议下的服务端并发 ''' 将不同的功能尽量拆分成不同的函数,拆分出来的功能可以被多个地方使用 TCP服务 ...

  4. C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  5. Intent 隐式跳转,向下一个活动传递数据,向上一个活动返回数据。

    一.每个Intent只能指定一个action,多个Category. 使用隐式跳转,我们不仅可以跳转到自己程序内的活动,还可以启动其他程序的活动.使得Android多个程序之间的功能共享成为可能. 例 ...

  6. Android开发:向下一个activity传递数据,返回数据给上一个activity

    1.向下一个activity传递数据 activity1 Button button=(Button) findViewById(R.id.button1); button.setOnClickLis ...

  7. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...

  8. 【Android】7.0 Intent向下一个活动传递数据、返回数据给上一个活动

    1.0 可以利用Intent吧数据传递给上一个活动,新建一个叫“hellotest01”的项目. 新建活动FirstActivity,勾选“Generate Layout File”和“Launche ...

  9. Android基础Activity篇——Intent向下一个活动传递数据

    1.向下一个活动传递数据 String data ="bilibilbilbilbili"; Intent intent1=new Intent(this,secondActivi ...

随机推荐

  1. Android App图片资源文件压缩利器McImage

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/195 Android App图片资源文件压缩利器McIma ...

  2. 编译原理之不懂就问-First集

    老师PPT: 这条语言实在是..通俗易懂

  3. RAID&LVM有关磁盘的故障

    目录 RAID&LVM有关磁盘的故障 RAID 注意:RAID硬盘失效处理--热备和热拔插 RAID实战 LVM介绍 磁盘故障 RAID&LVM有关磁盘的故障 RAID 好处:1.更多 ...

  4. python 错误信息是:sudo :apt-get:command not found

    1.问题描述 错误信息是:sudo :apt-get:command not found 2.问题原因及解决 在centos下用yum install xxx yum和apt-get的区别一般来说著名 ...

  5. HTTPS混合内容解析

    什么是HTTPS混合内容 我们可能会有这样的经验,当我们通过HTTPS访问一个网站的时候,突然有提示:“本页面包含有不安全的内容”.这个时候会询问是否显示“不安全的内容”,这个时候,就是遇到了有混合内 ...

  6. iotop使用方法

    iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具.iotop 具有与 top 相似的 UI,其中包括 PID.用户.I/O.进程等相关信息.   安装 yum install iot ...

  7. Python封装发送信息到钉钉群

    发送信息到钉钉群 from dingtalkchatbot.chatbot import DingtalkChatbot class SendText: def __init__(self, webh ...

  8. JavaScript实现点击复制按钮复制文本框的内容,兼容IOS

    <lable> <input type="text" id="txt"> <a href="javascript:;&q ...

  9. C# 常用排序算法

    文章引用地址:https://www.cnblogs.com/fengyeqingxiang/archive/2019/06/14/11021852.html C#所有经典排序算法汇总   1 2 3 ...

  10. 04_javaSE面试题:方法的参数传递机制

    题目 import java.util.Arrays; /** * @author kevin * @date 2019/7/10 9:46 */ public class Exam4 { publi ...