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) ...
随机推荐
- Win8 Metro(C#)数字图像处理--2.46图像RGB分量增强效果
原文:Win8 Metro(C#)数字图像处理--2.46图像RGB分量增强效果 [函数名称] RGB分量调整 RGBAdjustProcess(WriteableBitmap ...
- Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法
原文:Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法 [函数名称] 彩色图像密度分割函数 DensitySegmentProcess(WriteableB ...
- Win8Metro(C#)数字图像处理--2.34直方图规定化
原文:Win8Metro(C#)数字图像处理--2.34直方图规定化 [函数名称] WriteableBitmap HistogramSpecificateProcess(WriteableBi ...
- Android零基础入门第71节:CardView简单实现卡片式布局
还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...
- CoolFormat(Qt Creator也可管理VC的Project)
http://download.csdn.net/download/akof1314/8457593 https://github.com/akof1314/CoolFormat http://dow ...
- MinGW 编译 libsndfile-1.0.25(只要有 MSYS,./configure make make install 就行了)
最近做的一个项目需要读写 wav 文件.在网上找到 libsndfile 刚好满足我的需要.但是编译的时候遇到了点小麻烦,这里记录一下编译的过程,免得下次再编译时忘记了. 因为是在编译完成若干天后写的 ...
- IdHTTP设置SSL证书,乱码问题也解决了
要跟银行做接口,需要使用delphi来post数据,但对方提供的是https开头的网址,需要使用证书,对方已提供证书了,但是还是调用不成功,使用的是idhttp和TIdSSLIOHandlerSock ...
- Web 高效开发必备的 PHP 框架
摘要: 每周为您推送最有价值的开源技术内参! 码云项目推荐 1.项目名称:多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合 ...
- foruok安晓辉的《程序员,你好哇》,都很不错
http://blog.csdn.net/foruok 买书: http://item.jd.com/11904166.html
- 验证码生成器(在TImage.Canvas上写字,很好看)
生成验证码的方式有很多种,如下则是比较简单的实现,且运用了正余弦曲线来扭曲验证码字符. unit AuthenticodeGenerate; interface uses SysUtils, Wind ...