socket小实例
服务端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading;
namespace SocketDemo {
class Program { static Socket serverSocket; static Socket clientSocket; static Thread thread; static void Main(string[] args) { //将网络端点表示为IP地址和端口 用于socket侦听时绑定 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 3001); //使用指定的地址族、套接字类型和协议初始化socket类的新实例 serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp); //将所创建的Socket与IPEndPoint绑定 serverSocket.Bind(ipep); //设置套接字为收听模式 定队列中最多可容纳的等待接受的传入链接数为10 serverSocket.Listen(10); //在Socket上接收接入的连接 while (true) { //serverSocket.Accept()接收客户端Socket的连接请求 当程序运行到serverSocket.Accept()时会等待直到有客户端Socket发起连接请求时 获取客户端Socket
clientSocket = serverSocket.Accept(); thread = new Thread(new ThreadStart(Program.doWork)); thread.Start(); } Console.Read(); } private static void doWork() {
Socket clinet = clientSocket; //客户端信息 IPEndPoint ipEndPoint = (IPEndPoint)clinet.RemoteEndPoint; String address = ipEndPoint.Address.ToString(); String port = ipEndPoint.Port.ToString(); Console.WriteLine(address + ":" + port + " 连接过来了"); while (true) { Byte[] inBuffer = new Byte[clinet.ReceiveBufferSize]; Byte[] outBuffer=new Byte[1024]; String inBufferStr; String outBufferStr; try { //如果接收的消息为空 阻塞 当前循环 clinet.Receive(inBuffer, clinet.ReceiveBufferSize, SocketFlags.None); } catch(SocketException) { clinet.Close(); return; } inBufferStr = Encoding.ASCII.GetString(inBuffer); Console.WriteLine(address + ":" + port + "说:"); Console.WriteLine(inBufferStr.Trim());
outBufferStr = Console.ReadLine().Trim();
outBuffer = Encoding.ASCII.GetBytes(outBufferStr); clinet.Send(outBuffer, outBuffer.Length, SocketFlags.None); }
} } }
客户端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net;
namespace clientSocket { class Program { static Socket clientSocket; static void Main(string[] args) { try { //将网络端点表示为IP地址和端口,用于socket侦听时绑定 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3001); clientSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp); //将socket连接到服务器 clientSocket.Connect(ipep); String outBufferStr; Byte[] outBuffer = new Byte[1024]; Byte[] inBuffer = new Byte[1024]; //发送消息 outBufferStr = Console.ReadLine().Trim(); outBuffer = Encoding.ASCII.GetBytes(outBufferStr); clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None); Console.WriteLine("服务器响应:"); //接收服务器端信息 clientSocket.Receive(inBuffer, 1024, SocketFlags.None); Console.WriteLine(Encoding.ASCII.GetString(inBuffer)); Console.ReadLine(); } catch(Exception exp) { Console.WriteLine(exp.Message); Console.ReadLine(); } } } }
socket小实例的更多相关文章
- Python_爬虫小实例
爬虫小实例 一.问题描述与分析 Q:查询某一只股票,在百度搜索页面的结果的个数以及搜索结果的变化. 分析: 搜索结果个数如下图: 搜索结果的变化:通过观察可以看到,每个一段时间搜索结果的个数是有所变化 ...
- (8)Linux(客户端)和Windows(服务端)下socket通信实例
Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows Client端 #include <st ...
- winform 异步读取数据 小实例
这几天对突然对委托事件,异步编程产生了兴趣,大量阅读前辈们的代码后自己总结了一下. 主要是实现 DataTable的导入导出,当然可以模拟从数据库读取大量数据,这可能需要一定的时间,然后 再把数据导入 ...
- CSS应用内容补充及小实例
一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Objective-C之代理设计模式小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Objective-C之@类别小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- OC小实例关于init方法不小心的错误
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- canva实践小实例 —— 马赛克效果
前面给大家带来了操作像素的API,此时此刻,我觉得应该配以小实例来进行进一步的说明和演示,以便给大家带来更宽广的视野和灵感,你们看了我的那么多的文章,应该是懂我的风格,废话不多说,进入正题: 这次给大 ...
- canvas实践小实例二 —— 扇形
俗话说:发图不留种,菊花万人捅!我这里想延伸一下:教学不给例,说你是傻逼!哎呀,还挺押韵,嘻嘻,开个玩笑! 我们都讲了四期API的知识了,估计大家看的也是枯燥的很啊,前面的小实例也是太简单,简直不解渴 ...
随机推荐
- ny540 奇怪的排序 简单题
奇怪的排序 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情.惟独对自然数的理解与人类不一 ...
- cocos2d-x 3.0点击响应
迄今为止,发现cocos2d-x 3.0最让人惊艳的地方就是更改了点击事件机制.(ps:迄今只看了点击事件这块,捂嘴笑~~~) cocos2d-x 2.0 只有CCLayer有点击事件处理,需要注册, ...
- 【HBase】Rowkey设计【转】
本章将深入介绍由HBase的存储架构在设计上带来的影响.如何设计表.row key.column等等,尽可能地使用到HBase存储上的优势. Key设计 HBase有两个基础的主键结构:row key ...
- JSP页面最终是编译为Servlet执行的
JSP页面最终是编译为Servlet执行的,你可以在Tomcat的%CATALINA_HOME%/work/Catalina/localhost中找到一个文件夹,该文件夹跟你的web-project的 ...
- 基于jQuery悬停弹出遮罩显示按钮代码
今天给大家分享一款基于jQuery悬停弹出遮罩显示按钮代码.这是是一款当鼠标悬停在图片上后,会出现一系列的按钮,文字等弹性动画效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: ...
- 【Unity笔记】碰撞器(Collision)与触发器(Trigger)的区别
当碰撞器Collision组件身上的属性IsTrigger勾选为True时,该碰撞器就成了触发器. 区别:1.能够产生的回调和函数不同.碰撞器:MonoBehaviour.OnCollisionEnt ...
- [转]Python与设计模式
一.创建类设计模式 前言 什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的事,而“学会”一门编程语言是非常难的一件事.前一个“会”强调 ...
- iOS彩票项目--第二天,自定义蒙版、封装活动菜单、自定义pop菜单
一.自定义蒙版--封装控件,先想好外界怎么来调用,根据外界调用的方法,然后进入内部实现 在外部,调用蒙版的方法--[ChaosCover show]; [ChaosCover hide]; 内部实现 ...
- print spooler 服务无法启动 打印机全部消失
这往往是失败的打印任务导致的. 打开 C:\Windows\System32\spool\PRINTERS ,这个目录下的文件全是打印缓存,失败的任务也保存在这里.把这里的文件全部删除,然后再重新启动 ...
- 腾讯云 Linux 挂载数据盘
查看已挂载的硬盘 1) 运行fdisk -l命令查看硬盘信息. 硬盘从未进行初始化时,需要先创建文件系统, 硬盘格式化 运行mkfs.ext4 device_n ...