分享

实现了本机两个进程之间的通信 c#.net socket

 地质博士 2018-02-21

实现本机上的两个进程之间的通信,是很有意义的。可以用于进程之间交换数据。

用.Net Socket很简单。寥寥几行代码。

原理与不同机之间通信是一样的。只不过是把本机既当服务端 又当客户端而已。

在设定端口之前,查询一下端口的状态,看是否被占用了。

在cmd中输入命令行 netstat -aon|findstr 'portnumber'

比如,我要查询5566号端口 我就在命令行中输入 netstat -aon|findstr '5566'

如果,没有显示端口的信息,直接可以继续输入命令行。

那么,这个端口就是没被占用。反之,如果显示了端口的信息,则被占用了。要换一个端口。

将一个程序(运行后即为进程)设为服务器。另一个则为客户端。

应用一的代码:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace appone{class Program{ public static void Main() { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); IPAddress IPA = IPAddress.Parse('192.168.1.8'); IPEndPoint ipEp = new IPEndPoint(IPA,5566); s.Bind(ipEp); s.Listen(1); Socket ms = s.Accept();//一旦接受请求,则返回一个专一通信的socket. Console.WriteLine('connecting success'); Console.WriteLine('please input a text'); string message = Console.ReadLine(); byte[] buffer = new byte[1024]; buffer =Encoding.UTF8.GetBytes(message); ms.Send(buffer,buffer.Length,SocketFlags.None);//终于明白了为什么要为每一个客户建立一个专一的socket了. //如果不这样的话,谁知道socket.Send()会发给谁呢? Console.ReadKey(); ms.Close(); s.Close(); } }}
应用二的代码:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace apptwo{ class Program { public static void Main(string[] args) { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); //下面行代码绑定一个IPAdress对象和端口。 IPEndPoint rIPEP = new IPEndPoint(IPAddress.Parse('192.168.1.8'),5566); s.Connect(rIPEP);//设置连接参数,即远程ip端点。交给socket去连接。程序往下走。 //如果socket没有瞬即连接成功。则socket一直在那尝试连接。而程序一直往下走。 //直到socket.receive()那里会停下来。等待有效字节流的到来。 byte[] buffer = new byte[1024]; int rbn; rbn = s.Receive(buffer);//等待尝试接收,一旦接收成功,则返回成功接收的字节数。 //一定要明白,这里面有个等待的过程。客户端要先进入等待接收状态,才能接收到来的字节流。 //不能先冒过了。 //要把握好服务器和客户的运行节奏。 string message = Encoding.UTF8.GetString(buffer); Console.WriteLine(message); Console.ReadKey(true); s.Close(); } }}


先运行应用一,因为它是作为服务器的。再运行应用二。


哈哈,一个进程文本瞬时显示在另一个进程里,好厉害,有木有。

在没学c# .net socket编程之前。感觉实现这个好难,一点眉目都没有。

但是,真的下决心去学以后。看一看基础,看一看前人的思路,实际的例子。稍稍用点心,体会体会,自己写几遍,就掌握了。然后,觉得好简单啊。如果当初 有畏难情绪,一直不下决心开始。那么,现在,依然觉得是难的,没有一点头绪,不知如何下手。

想做,有必要做,需要做,那就去做。下定决心,咬定青山不放松,想法设法去做到。就做到了。

这个风格不仅适用于计算机网络编程的学习。也适用于任何想做要做又没做过的事。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多