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

来源:互联网 发布:餐饮收银软件多少钱 编辑:程序博客网 时间:2024/05/22 17:42

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

用.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
原创粉丝点击