以下代码为服务端,非最终版代码,服务端可以接受多个客户端的请求,且所有消息会显示在服务端上,服务端无法发送消息:

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net"
  6. )
  7.  
  8. // HandleConn 是一个协程,并发处理请求,读取用户输入。
  9. func HandleConn(conn net.Conn) {
  10. address := conn.RemoteAddr().String()
  11. fmt.Println("接收到请求,来中:", address)
  12. conn.Write([]byte(conn.RemoteAddr().String() + "加入聊天室。"))
  13. buf := make([]byte, 1024)
  14. for {
  15. n, err := conn.Read(buf)
  16. if err != nil {
  17. fmt.Println("err", err)
  18. return
  19. }
  20. fmt.Println(string(buf[:n]))
  21. if string(buf[:n]) == "exit" {
  22. fmt.Println(address, "已退出聊天室。")
  23. return
  24. }
  25. // 可以实现自动回复消息,将收到的消息中的字母转换为大写后发送出去,去掉注释即可。
  26. // conn.Write([]byte(strings.ToUpper(string(buf[:n]))))
  27. }
  28. }
  29.  
  30. func main() {
  31. listen, err := net.Listen("tcp", "127.0.0.1:8888")
  32. defer listen.Close()
  33. fmt.Println("Listening on ", listen.Addr().String())
  34. if err != nil {
  35. fmt.Println("err:", err)
  36. return
  37. }
  38. for {
  39. conn, err := listen.Accept()
  40. if err != nil {
  41. fmt.Println("err", err)
  42. return
  43. }
  44. go HandleConn(conn)
  45. }
  46. }

  以下代码为客户端代码,输入exit即可断开与服务器的连接:

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net"
  6. )
  7.  
  8. func main() {
  9. conn, err := net.Dial("tcp", "127.0.0.1:8888")
  10. go HandleRead(conn)
  11. if err != nil {
  12. fmt.Println("err=", err)
  13. }
  14. defer conn.Close()
  15. var abc string
  16. for {
  17. fmt.Scanln(&abc)
  18. conn.Write([]byte(abc))
  19. if abc == "exit" {
  20. fmt.Println("正在退出......")
  21. return
  22. }
  23. }
  24.  
  25. }
  26.  
  27. // HandleRead 用来阅读服务器发送的数据
  28. func HandleRead(conn net.Conn) {
  29. buf := make([]byte, 1024)
  30. for {
  31. n, err := conn.Read(buf)
  32. if err != nil {
  33. fmt.Println("err:", err)
  34. return
  35. }
  36. fmt.Println(string(buf[:n]))
  37. }
  38. }

  

简单TCP服务器和TCP客户端源码(Golang)的更多相关文章

  1. 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    [转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...

  2. C#中国象棋+游戏大厅 服务器 + 客户端源码

    来源:www.ajerp.com/bbs C#中国象棋+游戏大厅 服务器 + 客户端源码 源码开源 C#版中国象棋(附游戏大厅) 基于前人大虾的修改版 主要用委托实现 服务器支持在线人数,大厅桌数的设 ...

  3. RSA客户端js加密服务器C#解密(含源码)

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. 使用CBrother做TCP服务器与C++客户端通信

    使用CBrother脚本做TCP服务器与C++客户端通信 工作中总是会遇到一些对于服务器压力不是特别大,但是代码量比较多,用C++写起来很不方便.对于这种需求,我选择用CBrother脚本做服务器,之 ...

  5. FileZilla客户端源码解析

    FileZilla客户端源码解析 FTP是TCP/IP协议组的协议,有指令通路和数据通路两条通道.一般来说,FTP标准命令TCP端口号是21,Port方式数据传输端口是20. FileZilla作为p ...

  6. Zookeeper 源码(三)Zookeeper 客户端源码

    Zookeeper 源码(三)Zookeeper 客户端源码 Zookeeper 客户端主要有以下几个重要的组件.客户端会话创建可以分为三个阶段:一是初始化阶段.二是会话创建阶段.三是响应处理阶段. ...

  7. Eureka 系列(04)客户端源码分析

    Eureka 系列(04)客户端源码分析 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 在上一篇 Eureka 系列(01)最简使用姿态 中对 Eureka 的简单用法做 ...

  8. vs2008编译FileZilla客户端源码

    vs2008编译FileZilla客户端源码 下载FileZilla客户端源码,下载地址https://download.filezilla-project.org/. FileZilla客户端解决方 ...

  9. MQTT再学习 -- MQTT 客户端源码分析

    MQTT 源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇. 参看:逍遥子_mosquitto源码分析系列 参看:MQTT libmosquitto源码分析 参看:Mosquitto学习笔记 ...

随机推荐

  1. js滑动到页面底部实现

    js实现 1.window.scrollTo(0,document.documentElement.clientHeight);  //js jq实现 2 .var windowHeight = pa ...

  2. 六、Zookeeper-开源客户端ZkClient与Curator

    ZkClient 从创建会话.创建节点.读取数据.更新数据.删除节点拉介绍ZkClient 添加依赖: pom.xml <dependency> <groupId>com.10 ...

  3. Flask开发技巧之参数校验

    Flask开发技巧之参数校验 目录 Flask开发技巧之参数校验 1.请求参数分类 2.解决方案使用到的库 3.针对url查询参数与一般json格式 4.针对复杂json格式数据 本人平时开发中使用的 ...

  4. SpringBoot+Redis相关配置文件

    springboot整合redis配置类 package com.yalong.config; import com.fasterxml.jackson.annotation.JsonAutoDete ...

  5. swiper4使用教程-填坑

    本篇博客用于记录使用swiper插件中的一些关键点: 首先附上官网地址:https://www.swiper.com.cn/ ios中使用swiper的坑: /*解决swiper中苹果点击变暗,在cs ...

  6. DVWA各等级XSS

    xss原理及基本介绍 XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器 ...

  7. python爬虫--用xpath爬豆瓣电影

    步骤 将目标网站下的页面抓取下来 将抓取下来的数据根据一定规则进行提取   具体流程 将目标网站下的页面抓取下来 1. 倒库 import requests 2.头信息(有时候可不写) headers ...

  8. zstd c++ string 压缩&解压

    zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ...

  9. [日常摸鱼]luogu1613跑路

    新年A的第一道题2333 https://www.luogu.org/problemnew/show/P1613 题意:给一张有向图,每条边长为1,每个单位时间只能走$2^k$的长度,$k$可以任意选 ...

  10. GitBook简单的使用

    GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书. 使用 GitBook 管 ...