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

源码位置: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. C# 在iis windows authentication身份验证下,如何实现域用户自动登录

    前言: 该博文产生的背景是有个项目在客户那部署方式为iis windows身份验证,而客户不想每次登录系统都要输入帐号和密码来登录. 因此需要得到域用户,然后进行判断该用户是否可以进入系统. 解决方法 ...

  2. Day5 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

  3. Gulp和webpack的区别,是一种工具吗?

    疑问:gulp和webpack 什么关系,是一种东西吗?可以只用gulp,不用webpack吗 或者反过来? 它们的区别和概念 ------------------------------------ ...

  4. [笔记]scanf的使用(主要是针对char)

    学的是C++,用cin cout也用的很顺溜,写自己的类时重载"<<"与">>"运算符也很爽,但是发现在刷算法竞赛题时,cin cout ...

  5. Android N多窗口支持

    Android N 可以同时显示多个应用窗口. 在手机上,两个应用可以在"分屏"模式中左右并排或上下并排显示.例如,用户可以 在上面窗口聊QQ,下面窗口发送短信. 如图所示,两个a ...

  6. win7电脑关机时间长怎么办

    最近遇到电脑关机慢的问题,其实电脑是装了ssd的,而且关掉了许多不需要的软件服务,为什么还是会出现关机慢的问题呢?开机是很快的. 所以我做了以下尝试: 1 win + r 运行 regedit 注册表 ...

  7. 唯独ie浏览器缓存ajax请求

    用fiddler调试http请求,在ie浏览器下,如果请求命中缓存,fiddler不会包含该请求.但是在chrome下会包含缓存的请求,Result显示为304. ie浏览器还会缓存通过ajax请求的 ...

  8. 几张图带你轻轻松松了解小程序和APP的区别

    微信"小程序"的公测一开放,立即在朋友圈刷屏无数,仿佛人人都在互联网圈.但是因为微信限制,程序还不能发布使用,所以也极少人看到真正的小程序是怎么样的. 小程序驿站专注微信小程序的开 ...

  9. 关于win10和sqlserver的兼容性

    本人主要是用.NET开发一些MIS(信息管理系统)系统,如酒店管理系统,医院管理系统,以及其附属的如餐饮管理系统,洗浴管理系统,以及医保管理系统,合疗管理系统,前期开发的产品主要是VS2008+sql ...

  10. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...