后期项目实战:多人在线聊天室

源码位置: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的更多相关文章

  1. 在C#中初遇Socket - 1

    后期项目实战:多人在线聊天室 源码位置:https://git.oschina.net/z13qu/BlogProjects 课前须知 这里不讲解Socket和TCP/IP的底层知识 对于初学者来说底 ...

  2. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  3. EBS中利用Socket与外系统通信

    某银行要求做一个签到签退功能,日终EBS系统发送报文与核心系统对帐,规定利用Socket来做传送,记录下步骤: 1.编辑: $INST_TOP/ora/10.1.3/j2ee/oacore/appli ...

  4. 详细讲解nodejs中使用socket的私聊的方式

    详细讲解nodejs中使用socket的私聊的方式 在上一次我使用nodejs+express+socketio+mysql搭建聊天室,这基本上就是从socket.io的官网上的一份教程式复制学习,然 ...

  5. QT中的SOCKET编程(QT-2.3.2)

    转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/ QT中的SOCKET编程 2008-10-07 23:13 ...

  6. 34、Android中基于Socket的网络通信(一)

    Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求. 在java中,Socket和ServerSocket类库位于java.net包中,ServerSocket用于服 ...

  7. Android中基于Socket的网络通信

    1. Socket介绍 2. ServerSocket的建立与使用 3. 使用ServerSocket建立聊天服务器-1 4. 使用ServerSocket建立聊天服务器-2 5. 在Android中 ...

  8. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  9. 读懂Java中的Socket编程(转)

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

随机推荐

  1. Mongodb以及rockmongo安装

    Mongodb安装 以centos6.x_x_64位系统为例,我们使用yum安装 1.添加yum源 在/etc/yum.repos.d/目录下创建文件10genmon.repo(名字随意,.repo结 ...

  2. iOS开发之判断用户是否打开APP通知开关

    一.前言 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是 ...

  3. asp.net Socket的简单Web Server

    1.首先初始化socket,包含对端点以及对连接队列长度的初始化 IPAddress address = IPAddress.Loopback; IPEndPoint endPoint = ); So ...

  4. AJAX的简单梳理

    一.Ajax的简介 Ajax,异步JavaScript和XML,异步提交,无刷新技术,局部刷新技术 1)传统的客户端与服务器端交互的模式 客户端发送请求直接给服务端,服务接受到请求后进行逻辑运算,最终 ...

  5. 通过ssh远程ipython notebook登录使用服务器

    远程服务器有时候我们这里通过虚拟机登录服务器的winclient会发生冲突,怎么办呢?曲线救国,使用SSH登录. 首先在远程机器上,启动IPython notebooks服务: remote_user ...

  6. iframe 父子页面方法调用

    在写代码的时候经常会用到将一个网页嵌入到另一个网页中,w3c也规定了一个标签<iframe>,这个标签本身就支持跨域,而且所有的浏览器都支持 iframe具有以下属性: 1.framebo ...

  7. Promise简介

    Promise是ES6中的函数,规范了如何处理异步任务的回调函数,功能类似于jQuery的defferred.简单说就是通过promise对象的不同状态调用不同的回调函数.目前IE8及以下不支持,其他 ...

  8. 项目Contact开发中遇到的,引以为戒

    程序进去就闪退 其中指示错误的地方,函数内容如下: public void loadButtomMenu() { gv_buttom_menu = (GridView) this.findViewBy ...

  9. swift学习 - 单例实现(singleton)

    swift中实现单例的方式 class LGConfig: NSObject { static let instance = LGConfig() private override init() { ...

  10. jenkins+ant+jmeter html报告文件作为附件发送(ant-jmeter支持javamail)

    前言:由于ant-jmeter目前的版本不支持javamail,也就是说发送邮件时只能借助jenkins自带的发送邮件插件来发送报告. 但是jenkins发送邮件支持发送邮件内容(且有价值.有营养的内 ...