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

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

用.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编程之前。感觉实现这个好难,一点眉目都没有。

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

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

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



  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值