Java 和 .Net 使用套接字进行互操作





3.00/5 (10投票s)
2005 年 9 月 12 日
4分钟阅读

63635

999
Java 和 .Net 使用套接字进行互操作。本文介绍了一些双方的知识,这些知识将允许在 Java 套接字服务器和 C# 客户端之间传递原始数据。
引言
<SPAN style="FONT-SIZE: 10pt">URL
和<SPAN style="FONT-SIZE: 10pt">URLConnection
提供了一种相对高级的机制来访问 Internet 上的资源。有时,您的程序需要更低级别的网络通信,例如,当您想编写客户端-服务器应用程序时。
在客户端-服务器应用程序中,服务器提供一些服务,例如处理数据库查询或发送当前股票价格。客户端使用服务器提供的服务,例如向用户显示数据库查询结果或向投资者推荐股票购买。客户端和服务器之间发生的通信必须是可靠的。也就是说,不能丢失任何数据,并且数据必须在客户端以与服务器发送相同的顺序到达。
TCP 提供了一个可靠的点对点通信通道,Internet 上的客户端-服务器应用程序使用该通道进行通信。为了通过 TCP 进行通信,客户端程序和服务器程序会建立一个连接。每个程序在其连接的一端绑定一个套接字。为了通信,客户端和服务器分别从绑定的套接字读取和写入数据。
什么是套接字?
套接字是网络上运行的两个程序之间双向通信链路的一个端点。套接字类用于表示客户端程序和服务器程序之间的连接。java.net 包提供了两个类——Socket 和 ServerSocket——它们分别实现了连接的客户端和服务器端。
读写套接字
此页面包含一个小示例,说明客户端程序如何从套接字读取和写入数据。
编写客户端/服务器对
上一页展示了一个如何编写客户端程序的示例,该程序通过 Socket 对象与现有服务器进行交互。本页向您展示如何编写实现连接另一端的程序——服务器程序。
好了,关于套接字的基础知识就到这里……现在让我们来了解一点代码……
服务器端代码
所以,服务器端显然是用 Java 编写的。别问我为什么,因为就是这样。所以下面的代码中的基本原理是创建一个新的套接字连接,并初始化输入和输出缓冲区为新的输入和输出缓冲区,这些缓冲区将由您控制!!
server_socket = new ServerSocket(port); System.out.println("Server waiting for client on port " + server_socket.getLocalPort()); // server infinite loop while(true) { Socket socket = server_socket.accept(); System.out.println("New connection accepted " + socket.getInetAddress() + ":" + socket.getPort()); input = new BufferedReader(new InputStreamReader(socket.getInputStream())); output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); |
客户端代码
客户端是用 C# 编写的。这是代码片段。一个非常基础的客户端。
好的,让我指出代码中的重要部分。
因此,下面的代码是实际套接字连接的创建。需要提供诸如协议、服务器 IP 地址之类的属性。另外请注意,我个人使用了端口 1500,这并不是一个好习惯。按照一般约定,您应该使用一个空闲端口(如 8080 等)。无论如何,这取决于此代码的最终用户……如果有的话;)。
socket = new System.Net.Sockets.Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse("15.76.126.101"); System.Net.IPEndPoint remoteEP = new System.Net.IPEndPoint(ipAdd,1500); socket.Connect(remoteEP); |
socket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); System.Net.IPAddress ipAdd = System.Net.IPAddress.Parse("15.76.126.101"); System.Net.IPEndPoint remoteEP = new System.Net.IPEndPoint(ipAdd,1500); socket.Connect(remoteEP); //Async Read form the server side Receive(socket); //new System.Net.Sockets.TcpClient(server, port); while(true) { lineToBeSent = System.Console.ReadLine(); // stop if input line is "." if(lineToBeSent.Equals(".")) { socket.Close(); break; } //output.WriteLine(lineToBeSent);\ //System.Net.Sockets.NetworkStream tempstream = socket.GetStream(); socket.Send(encoding.GetBytes(lineToBeSent)); } |
大功告成……您可以在客户端和服务器之间传递原始数据。但我还没有涉及对象或结构。一旦完成,我将更新本文。