在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 ...
随机推荐
- 画地为Mask,随心所欲的高效遮罩组件[Unity]
在上一篇博文"扔掉遮罩,更好的圆形Image组件"中,笔者改变Image的顶点数据,使得Image呈圆形显示,避免了Mask的使用,从而节省Drawcall消耗,提高渲染效率了.这 ...
- vs项目和msql不兼容解决方案
当vs的工程项目加载了libmysql.lib 即:附加包含目录,附加库目录,附加依赖项都设置好之后,如过编译出现如下: error LNK2019: 无法解析的外部符号 _mysql_real_co ...
- ucenter 单点登录,终极版
一 ,discuz ecshop 两边登陆都可以同步登陆到另一程序上,但退出则无法实现同步登陆.顺着 Ecshop 的退出流程,顺藤摸瓜找到了 lib_common.php 文件中的 uc_ca ...
- Android网络下载图片
package net.learn2develop.Networking; import android.app.Activity; import android.os.Bundle; import ...
- 用SIM900上传云端数据(原创KEKE)
依次发送如下几个命令到SIM900A模块: AT+CGCLASS="B" AT+CGDCONT=1,"IP","CMNET" AT+CG ...
- 二、 添加控制器Controller(ASP.NET MVC5 系列)
MVC是Model-View-Controller的简写.MVC是一种开发良好架构,可测试,易维护应用程序的设计模式.据于MVC的应用程序应该包含: Models: 是呈现应用程序数据和使用验证逻辑给 ...
- linux 命令(alias , unalias , install ,ar , arch ,uname )
https://linux.die.net/man/ http://man.linuxde.net/ user commands 1.alias [ˈālēəs]:别名 alias --help al ...
- Android Weekly Notes Issue #258
Android Weekly Issue #258 May 21st, 2017 Android Weekly Issue #258 本期内容: 围绕着Google I/O的热潮, 本周的posts除 ...
- 客户端存储 API
介绍两个在客户端存储数据的 API localStorage与sessionStorage 两个都是window对象的属性,利用这两个属性,可以在客户端存储一些数据 相比cookie,这种存储方式的优 ...
- 移动前端meta
<!-- 页面描述 --> <meta name="description" content="不超过150个字符"/> <!-- ...