实现了本机两个进程之间的通信 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
- 实现了本机两个进程之间的通信 c#.net socket
- IPC实现本机进程之间通信
- Android 使用socket实现两个真机之间的通信
- Android 使用socket实现两个真机之间的通信
- LINUX 实现两个进程之间的通信
- 两个进程之间的通信
- 使用Socket实现两个模拟器之间的通信
- C# 利用Socket类实现客户端和服务器之间的通信,可在本机之间实现信息交互
- 直接读取进程内存实现两个应用程序之间的通信
- 使用管道实现两个进程之间的通信
- 本机两个Android模拟器之间的网络通信
- Linux进程间通信-----使用数据报套接字实现两个进程之间的通信
- 两个进程之间通信
- 利用socket实现vc++与.NET进程间的通信
- 利用socket实现vc++与.NET进程间的通信
- 两个进程之间的通信方式有哪几种?
- 实现本机2个模拟器之间的网络通信
- socket 本机C/S通信
- PHP课程总结20161213
- 多功能PCIE交换机之六:基于NTB夸节点的读写
- Leetcode 387. First Unique Character in a String (Easy) (cpp)
- [LeetCode]108. Convert Sorted Array to Binary Search Tree
- hadoop实例网址
- 实现了本机两个进程之间的通信 c#.net socket
- Leetcode 252. Meeting Rooms (Easy) (cpp)
- 16年底一份肯定自我的工作总结(两年公安、六年水利)
- HDU - 1717 小数化分数2
- Preface
- Leetcode 405. Convert a Number to Hexadecimal (Easy) (cpp)
- 对任何工具包或库的学习都要
- 管道和FIFO
- Erlang tail recursion和body recursion 在OTP19.1版本上执行时间差异