在C#中初遇Socket - 2
后期项目实战:多人在线聊天室
源码位置:https://git.oschina.net/z13qu/BlogProjects
前言
第一篇主要对Socket有个基本认识,实现初始化,发送、接受消息;本篇主要用Socekt实现服务端和客户端的对话功能。
服务端代码
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, 5001);
//1.建立一个Socket对象
Socket socketServer = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
//2.Socket关联到这个IP上面
socketServer.Bind(ipe);
socketServer.Listen(8);
Console.WriteLine("正在监听...");
//接收发送连接信息的客户端(一直等待客户端连接,不继续执行)
Socket acceptSocket = socketServer.Accept();
Console.WriteLine("连接成功!!");
//接受输入信息
string inputMsg = string.Empty;
//保存接受到的信息
string message = string.Empty;
while (true)
{
byte[] receiveBytes = new byte[2048];
//服务端会一直等待客户端发送消息过来,否则不继续执行
int byteLen = acceptSocket.Receive(receiveBytes, receiveBytes.Length, 0);
message = Encoding.UTF8.GetString(receiveBytes, 0, byteLen);
Console.WriteLine("客户端说:" + message);
Console.WriteLine("请您输入信息给客户端(输入exit退出对话):");
inputMsg = Console.ReadLine();
if (inputMsg.ToLower() == "exit")//退出对话
{
break;
}
byte[] sendBytes = Encoding.UTF8.GetBytes(inputMsg);
acceptSocket.Send(sendBytes, sendBytes.Length, 0);
}
//释放Socket占用的资源
acceptSocket.Dispose();
socketServer.Dispose();
Console.ReadKey();
}
客户端代码
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ip, 5001);
//1.建立一个Socket对象
Socket socketClient = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
//2.去连接这个IP(没有Socket监听这个端口,就会报错)
socketClient.Connect(ipe);
Console.WriteLine("连接服务端" + ipe + "成功");
//输入信息
string inputMsg = string.Empty;
//接受服务端发送过来的信息
string message = string.Empty;
while (true)
{
Console.WriteLine("请您输入信息给服务端(输入exit退出对话):");
inputMsg = Console.ReadLine();
if (inputMsg.ToLower() == "exit")//退出对话
{
break;
}
byte[] sendBytes = Encoding.UTF8.GetBytes(inputMsg);
socketClient.Send(sendBytes);
byte[] receiveBytes = new byte[2048];
//客户端会一直等待服务器发送消息,否则不继续执行
int byteLen = socketClient.Receive(receiveBytes,
receiveBytes.Length, 0);
message = Encoding.UTF8.GetString(receiveBytes, 0, byteLen);
Console.WriteLine("服务器说:" + message);
}
//释放Socket占用的资源
socketClient.Dispose();
Console.ReadKey();
}
总结
注意:先运行服务端,再运行客户端。
至此已经完成一个简单的Socket对话功能,
但是你会发现,客户端发送一句话,服务端才能发送一句话。
只能实现你说一句,我答一句的机制,离真实的对话场景还差一点。
那么让我们下篇来实现这个功能吧。
【原文链接】http://www.cnblogs.com/z13qu/p/6995420.html
在C#中初遇Socket - 2的更多相关文章
- 在C#中初遇Socket - 1
后期项目实战:多人在线聊天室 源码位置:https://git.oschina.net/z13qu/BlogProjects 课前须知 这里不讲解Socket和TCP/IP的底层知识 对于初学者来说底 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- EBS中利用Socket与外系统通信
某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...
- 详细讲解nodejs中使用socket的私聊的方式
详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...
- QT中的SOCKET编程(QT-2.3.2)
转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...
- 34、Android中基于Socket的网络通信(一)
Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...
- Android中基于Socket的网络通信
1. Socket介绍 2. ServerSocket的建立与使用 3. 使用ServerSocket建立聊天服务器-1 4. 使用ServerSocket建立聊天服务器-2 5. 在Android中 ...
- 读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- 读懂Java中的Socket编程(转)
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
随机推荐
- 微信小程序之购物车功能
前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...
- poj1847 Tram 最短路Dijkstra
题目链接:http://poj.org/problem?id=1847 Dijkstra算法的模版应用 题意:给你N个点和起点终点,点与点有铁路,接下来的N行分别为点i的情况 第一个数字表示与该点连通 ...
- UART通信
UART0串口调试过程:1.配置DTS节点 在Z:\rk3399\kernel\arch\arm64\boot\dts\rockchip路径下打开rk3399.dtsi文件,里面已经有UART0相关节 ...
- ASP.NET MVC5路由系统机制详细讲解
请求一个ASP.NET mvc的网站和以前的web form是有区别的,ASP.NET MVC框架内部给我们提供了路由机制,当IIS接受到一个请求时,会先看是否请求了一个静态资源(.html,css, ...
- php 使用composer
之前写过相关的composer,之后碰到了几个朋友问我,我整理了一下,方便自己也方便大家日后查阅~~不玩开源的程序员不是好厨子 1.执行在线安装 curl -sS https: ...
- 10.Java 加解密技术系列之 DH
Java 加解密技术系列之 DH 序 概念 原理 代码实现 结果 结束语 序 上一篇文章中简单的介绍了一种非对称加密算法 — — RSA,今天这篇文章,继续介绍另一种非对称加密算法 — — DH.当然 ...
- 第 5 章 MySQL 备份与恢复
第 5 章 MySQL 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 My ...
- Oracle数据库------体系结构
ORACLE体系结构包括:实例(Instance),数据库文件,用户进程(User process),服务器进程以及其他文件. 1.ORACLE实例(instance) 1).要访问数据库必须 ...
- 更换包管理工具npm为yarn
官网:https://yarnpkg.com/zh-Hans/ 主要考虑: 1. npm管理安装模块依赖的版本不太方便,容易在删除node_modules重新install或在其他机器上新安装时, 安 ...
- iOSNsPredicate Appium 定位元素
Appium使用WebDriverAgent之后,新增了一种定位方法iOSNsPredicate,总结了一下使用方法: MobileElement photo = driver.findElement ...