一、服务器端

1. 实例化并设置socket实例对象

a.创建ip地址和端口

b.绑定监听地址

c.设置一下允许同时访问数

2. 监听连接

a.通过启动一个新的线程执行,这样主线程不会假死(启动线程,所带的参数必须是object类型)

b.利用循环等待连接并返回一个负责通信的socket实例

c.返回的socket实例中可以获取到所连接客服的IP地址

3. 接收客服的发送过来的消息

a.在监听方法中启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

d.接收到消息给客服的返回消息

4. 控制台程序服务器端代码

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading;
  6.  
  7. namespace ServerSocket
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Console.WriteLine("Hello World!");
  14. Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
  15. IPAddress ip = IPAddress.Any;
  16. IPEndPoint point = new IPEndPoint(ip, );
  17. //socket绑定监听地址
  18. serverSocket.Bind(point);
  19. Console.WriteLine("Listen Success");
  20. //设置同时连接个数
  21. serverSocket.Listen();
  22.  
  23. //利用线程后台执行监听,否则程序会假死
  24. Thread thread = new Thread(Listen);
  25. thread.IsBackground = true;
  26. thread.Start(serverSocket);
  27.  
  28. Console.Read();
  29. }
  30.  
  31. /// <summary>
  32. /// 监听连接
  33. /// </summary>
  34. /// <param name="o"></param>
  35. static void Listen(object o)
  36. {
  37. var serverSocket = o as Socket;
  38. while (true)
  39. {
  40. //等待连接并且创建一个负责通讯的socket
  41. var send = serverSocket.Accept();
  42. //获取链接的IP地址
  43. var sendIpoint = send.RemoteEndPoint.ToString();
  44. Console.WriteLine($"{sendIpoint}Connection");
  45. //开启一个新线程不停接收消息
  46. Thread thread = new Thread(Recive);
  47. thread.IsBackground = true;
  48. thread.Start(send);
  49. }
  50. }
  51.  
  52. /// <summary>
  53. /// 接收消息
  54. /// </summary>
  55. /// <param name="o"></param>
  56. static void Recive(object o)
  57. {
  58. var send = o as Socket;
  59. while (true)
  60. {
  61. //获取发送过来的消息容器
  62. byte[] buffer = new byte[ * * ];
  63. var effective = send.Receive(buffer);
  64. //有效字节为0则跳过
  65. if (effective == )
  66. {
  67. break;
  68. }
  69. var str = Encoding.UTF8.GetString(buffer,, effective);
  70. Console.WriteLine(str);

           var buffers = Encoding.UTF8.GetBytes("Server Return Message");
           send.Send(buffers);

  1. }
  2. }
  3. }
  4. }

二、客户端

1. 实例化并进行连接socket实例对象

a.创建ip地址和端口(服务器的IP和端口)

b.与服务器端建立链接

2. 接收服务器发送的消息

a.启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

3. 给服务器发送消息

    a. 调用socket对象的send()方法直接发送

4. 控制台程序客户端代码

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. using System.Threading;
  6.  
  7. namespace SocketClient
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Console.WriteLine("Hello World!");
  14. //创建实例
  15. Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
  16. IPAddress ip = IPAddress.Parse("192.168.0.111");
  17. IPEndPoint point = new IPEndPoint(ip, );
  18. //进行连接
  19. socketClient.Connect(point);
  20.  
  21. //不停的接收服务器端发送的消息
  22. Thread thread = new Thread(Recive);
  23. thread.IsBackground = true;
  24. thread.Start(socketClient);
  25.  
  26. //不停的给服务器发送数据
  27. int i = ;
  28. while (true)
  29. {
  30. i++;
  31. var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");
  32. var temp = socketClient.Send(buffter);
  33. Thread.Sleep();
  34. }
  35.  
  36. }
  37.  
  38. /// <summary>
  39. /// 接收消息
  40. /// </summary>
  41. /// <param name="o"></param>
  42. static void Recive(object o)
  43. {
  44. var send = o as Socket;
  45. while (true)
  46. {
  47. //获取发送过来的消息
  48. byte[] buffer = new byte[ * * ];
  49. var effective = send.Receive(buffer);
  50. if (effective == )
  51. {
  52. break;
  53. }
  54. var str = Encoding.UTF8.GetString(buffer, , effective);
  55. Console.WriteLine(str);
  56. }
  57. }
  58. }
  59. }

C# Socket 简单的控制台案例的更多相关文章

  1. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  2. Python3+Dlib实现简单人脸识别案例

    Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...

  3. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  4. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  5. C# .NET Socket 简单实用框架,socket组件封装

    参考资料 https://www.cnblogs.com/coldairarrow/p/7501645.html 根据.NET Socket 简单实用框架进行了改造,这个代码对socket通信封装还是 ...

  6. 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室

    1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...

  7. C# Socket简单例子(服务器与客户端通信)

    这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...

  8. 【Java】Socket+多线程实现控制台聊天室

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827212.html 聊天室程序的结构图: 架构解释: Server服务器相当于一个中转站,Client客户端 ...

  9. 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室

    1.简单的聊天室(控制台): 功能实现: 客户端和服务端的信息交流: 2.牵扯到的知识点: 这个我大概说一下,详细后面见代码! 1) 网络通讯的三要素 1. IP 2. 端口号. 3. 协议   2) ...

随机推荐

  1. Socket小白篇-附加TCP/UDP简介

    Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...

  2. C# string.Format()格式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  3. CentOS安装mysq

    一安装依赖 yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 yum -y update libstdc++-4.4.7-4.el6.x8 ...

  4. js判断图片是否存在

    var imageData = Array(); for(var i = 0; i < imageTemp.length; i++){ ajaxSizeRequest = $.ajax({ ty ...

  5. 2016最受欢迎国产开源软件评选,2016 年度开源中国新增开源软件排行榜 TOP 100

    http://www.oschina.net/news/80154/2016-cn-open-source-software-top http://www.oschina.net/project/to ...

  6. [2017.02.06] 阅读《Effective Morden C++》

  7. SYN6109型 NTP网络子钟

    SYN6109型 NTP网络子钟 产品概述 SYN6109型NTP网络子钟是由西安同步电子科技有限公司精心设计.自行研发生产的一套通过网口与母钟连接的子钟,接收母钟发送来的时间信息(信息内容:年.月. ...

  8. 用shell做简单的分布式计算

    # 分布式计算小试 # .首先获取本机host,作为实际计算时分区hash的种子 # .以*.*.*.44为主节点,*.*.*.///43为从节点 hash=`cat /root/data/host. ...

  9. spring boot中使用servlet、listener和filter

    spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...

  10. springboot部署到tomcat

    把spring-boot项目按照平常的web项目一样发布到tomcat容器下 多点经验: 1.保证运行环境的jdk和开发环境一致,不然class文件无法被编译 2.保证tomcat和java的版本匹配 ...