本文将编写2个控制台应用程序,一个是服务器端(server),一个是客户端(client),

通过server的监听,有新的client连接后,接收client发出的信息。

server代码如下:

 using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading; namespace Server
{
class Program
{
static void Main(string[] args)
{
Socket server = new Socket(
//寻址方式,InterNetwork是指IPv4的方式
AddressFamily.InterNetwork,
//套接字类型,一般都是采取stream,即流的形式
SocketType.Stream,
//通信协议,这里使用TCP
ProtocolType.Tcp
);
//绑定端口,参数是IP地址和端口号,IP地址即本机的IP地址,端口号则随便,只要不是已经被占用的即可
server.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.101"), ));
//设置监听的client上限
server.Listen();
Console.WriteLine("server is listening");
//用于接收client连接的线程
Thread tAccept = new Thread(() =>
{
//使用死循环
while (true)
{
//接收
Socket client = server.Accept();
Console.WriteLine("new client is connection,ip is" + client.RemoteEndPoint);
//用于接收信息的线程
Thread tReceive = new Thread(() =>
{
while (true)
{
byte[] bs = new byte[];
//使用字节数组接收
int length = client.Receive(bs);
string str = Encoding.UTF8.GetString(bs);
Console.WriteLine(str);
}
}
);
tReceive.IsBackground = true;
tReceive.Start();
}
}
);
tAccept.IsBackground = true;
tAccept.Start();
Console.ReadKey();
}
}
}

client代码如下:

 using System;
using System.Net;
using System.Net.Sockets;
using System.Text; namespace Client
{
class Program
{
static void Main(string[] args)
{
Socket client = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp
);
client.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.101"), ));
while (true)
{
Console.Write("please type something:");
string str = Console.ReadLine();
if (str.Equals("quit"))
{
break;
}
byte[] bs = Encoding.UTF8.GetBytes(str);
client.Send(bs);
} //关闭通信的方式,这里不需用,因为会引发异常
//client.Close();
//client.Shutdown(SocketShutdown.Both);
Console.ReadKey();
}
}
}

运行:

1、先运行server;

2、再运行client,输入内容后,server会显示内容,输入“quit”则关闭通信连接。

完成

C# Socket通信 小案例的更多相关文章

  1. Scala进阶之路-Spark底层通信小案例

    Scala进阶之路-Spark底层通信小案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark Master和worker通信过程简介 1>.Worker会向ma ...

  2. grpc基础讲解和golang实现grpc通信小案例

    grpc简介 gRPC由google开发,是一款语言中立.平台中立.开源的远程过程调用系统 gRPC客户端和服务端可以在多种环境中运行和交互,例如用java写一个服务端,可以用go语言写客户端调用 g ...

  3. 基于多线程的TCP socket通信经典案例

    服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; ...

  4. sparkstreaming+socket workCount 小案例

    Consumer代码 import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext impo ...

  5. java学习小笔记(三.socket通信)【转】

    三,socket通信1.http://blog.csdn.net/kongxx/article/details/7288896这个人写的关于socket通信不错,循序渐进式的讲解,用代码示例说明,运用 ...

  6. C++服务器与java进行socket通信案例

    分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyz ...

  7. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  8. Java多线程技术:实现多用户服务端Socket通信

    目录 前言回顾 一.多用户服务器 二.使用线程池实现服务端多线程 1.单线程版本 2.多线程版本 三.多用户与服务端通信演示 四.多用户服务器完整代码 最后 前言回顾 在上一篇<Java多线程实 ...

  9. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

随机推荐

  1. imacros实现Excel数据自动录入到网页中

    一.工具选择 最近接到一个项目,需要将excel数据逐条录入.保存到网页中.经过搜集资料,能实现功能的大概有以下几种方式,按键精灵.autoit.imacros.python+selenium. 按键 ...

  2. Struts_json插件配置参数

    Struts中使用json需要在struts基础上加上几个包:(这里只列出了重要的几个) commons-lang-2.4.jar: jsonplugin-0[1].32.jar: 下面是配置文件中的 ...

  3. Netty版本升级血泪史之线程篇

    1. 背景 1.1. Netty 3.X系列版本现状 根据对Netty社区部分用户的调查,结合Netty在其它开源项目中的使用情况,我们可以看出目前Netty商用的主流版本集中在3.X和4.X上,其中 ...

  4. 使用expect实现批量操作的自动化

    http://blog.csdn.net/hijk139/article/details/9121345

  5. MFC 仿QQ聊天软件(黄花寒)

    http://blog.csdn.net/lh844386434/article/details/6655080 http://download.csdn.net/download/lh8443864 ...

  6. Delphi与Java中的日期互换

    在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两 ...

  7. eclipse下切换svn用户

    在eclipse中经常用到用svn进行代码版本控制,为了提交或更新代码的时候不反复地提示我们输入用户名和密码,于是我们就习惯把访问SVN的用户名密码自动保存起来.以便下次自动使用,不要再次手工输入,但 ...

  8. bzoj1560

    首先这种题目肯定是要先排序,以x为第一关键字,y为第二关键字不难想到O(n2)的dp,下面显然要优化不难发现,由于两点的耗费是坐标差的平方的和,不带根号,因此,不难发现一个很有用的性质,如果从A点能到 ...

  9. 清除nginx静态资源缓存

    之前写过一篇如何配置nginx缓存及手动清除缓存的文章: http://www.cnblogs.com/Eivll0m/p/4921829.html 但如果有大量缓存需要清理,手动一条条清理就比较慢了 ...

  10. jboss as7 o.h.c.s.c.i.BroadcastGroupImpl Network is unreachable

    Question: [Server:server-one] 22:52:56,876 ERROR [org.hornetq.core.server.cluster.impl.BroadcastGrou ...