C# Socket 简单的控制台案例
一、服务器端
1. 实例化并设置socket实例对象
a.创建ip地址和端口
b.绑定监听地址
c.设置一下允许同时访问数
2. 监听连接
a.通过启动一个新的线程执行,这样主线程不会假死(启动线程,所带的参数必须是object类型)
b.利用循环等待连接并返回一个负责通信的socket实例
c.返回的socket实例中可以获取到所连接客服的IP地址
3. 接收客服的发送过来的消息
a.在监听方法中启动一个新的线程执行
b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数
c.如果有效字节数为0则跳出循环
d.接收到消息给客服的返回消息
4. 控制台程序服务器端代码
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- namespace ServerSocket
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Hello World!");
- Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
- IPAddress ip = IPAddress.Any;
- IPEndPoint point = new IPEndPoint(ip, );
- //socket绑定监听地址
- serverSocket.Bind(point);
- Console.WriteLine("Listen Success");
- //设置同时连接个数
- serverSocket.Listen();
- //利用线程后台执行监听,否则程序会假死
- Thread thread = new Thread(Listen);
- thread.IsBackground = true;
- thread.Start(serverSocket);
- Console.Read();
- }
- /// <summary>
- /// 监听连接
- /// </summary>
- /// <param name="o"></param>
- static void Listen(object o)
- {
- var serverSocket = o as Socket;
- while (true)
- {
- //等待连接并且创建一个负责通讯的socket
- var send = serverSocket.Accept();
- //获取链接的IP地址
- var sendIpoint = send.RemoteEndPoint.ToString();
- Console.WriteLine($"{sendIpoint}Connection");
- //开启一个新线程不停接收消息
- Thread thread = new Thread(Recive);
- thread.IsBackground = true;
- thread.Start(send);
- }
- }
- /// <summary>
- /// 接收消息
- /// </summary>
- /// <param name="o"></param>
- static void Recive(object o)
- {
- var send = o as Socket;
- while (true)
- {
- //获取发送过来的消息容器
- byte[] buffer = new byte[ * * ];
- var effective = send.Receive(buffer);
- //有效字节为0则跳过
- if (effective == )
- {
- break;
- }
- var str = Encoding.UTF8.GetString(buffer,, effective);
- Console.WriteLine(str);
var buffers = Encoding.UTF8.GetBytes("Server Return Message");
send.Send(buffers);
- }
- }
- }
- }
二、客户端
1. 实例化并进行连接socket实例对象
a.创建ip地址和端口(服务器的IP和端口)
b.与服务器端建立链接
2. 接收服务器发送的消息
a.启动一个新的线程执行
b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数
c.如果有效字节数为0则跳出循环
3. 给服务器发送消息
a. 调用socket对象的send()方法直接发送
4. 控制台程序客户端代码
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- namespace SocketClient
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Hello World!");
- //创建实例
- Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
- IPAddress ip = IPAddress.Parse("192.168.0.111");
- IPEndPoint point = new IPEndPoint(ip, );
- //进行连接
- socketClient.Connect(point);
- //不停的接收服务器端发送的消息
- Thread thread = new Thread(Recive);
- thread.IsBackground = true;
- thread.Start(socketClient);
- //不停的给服务器发送数据
- int i = ;
- while (true)
- {
- i++;
- var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");
- var temp = socketClient.Send(buffter);
- Thread.Sleep();
- }
- }
- /// <summary>
- /// 接收消息
- /// </summary>
- /// <param name="o"></param>
- static void Recive(object o)
- {
- var send = o as Socket;
- while (true)
- {
- //获取发送过来的消息
- byte[] buffer = new byte[ * * ];
- var effective = send.Receive(buffer);
- if (effective == )
- {
- break;
- }
- var str = Encoding.UTF8.GetString(buffer, , effective);
- Console.WriteLine(str);
- }
- }
- }
- }
C# Socket 简单的控制台案例的更多相关文章
- .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 ...
- Python3+Dlib实现简单人脸识别案例
Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...
- 使用Java实现简单的斗地主案例
使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- C# .NET Socket 简单实用框架,socket组件封装
参考资料 https://www.cnblogs.com/coldairarrow/p/7501645.html 根据.NET Socket 简单实用框架进行了改造,这个代码对socket通信封装还是 ...
- 网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室
1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! ...
- C# Socket简单例子(服务器与客户端通信)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...
- 【Java】Socket+多线程实现控制台聊天室
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827212.html 聊天室程序的结构图: 架构解释: Server服务器相当于一个中转站,Client客户端 ...
- 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室
1.简单的聊天室(控制台): 功能实现: 客户端和服务端的信息交流: 2.牵扯到的知识点: 这个我大概说一下,详细后面见代码! 1) 网络通讯的三要素 1. IP 2. 端口号. 3. 协议 2) ...
随机推荐
- Socket小白篇-附加TCP/UDP简介
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- C# string.Format()格式
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- 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 ...
- js判断图片是否存在
var imageData = Array(); for(var i = 0; i < imageTemp.length; i++){ ajaxSizeRequest = $.ajax({ ty ...
- 2016最受欢迎国产开源软件评选,2016 年度开源中国新增开源软件排行榜 TOP 100
http://www.oschina.net/news/80154/2016-cn-open-source-software-top http://www.oschina.net/project/to ...
- [2017.02.06] 阅读《Effective Morden C++》
- SYN6109型 NTP网络子钟
SYN6109型 NTP网络子钟 产品概述 SYN6109型NTP网络子钟是由西安同步电子科技有限公司精心设计.自行研发生产的一套通过网口与母钟连接的子钟,接收母钟发送来的时间信息(信息内容:年.月. ...
- 用shell做简单的分布式计算
# 分布式计算小试 # .首先获取本机host,作为实际计算时分区hash的种子 # .以*.*.*.44为主节点,*.*.*.///43为从节点 hash=`cat /root/data/host. ...
- spring boot中使用servlet、listener和filter
spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...
- springboot部署到tomcat
把spring-boot项目按照平常的web项目一样发布到tomcat容器下 多点经验: 1.保证运行环境的jdk和开发环境一致,不然class文件无法被编译 2.保证tomcat和java的版本匹配 ...