65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (10投票s)

2005 年 9 月 12 日

4分钟阅读

viewsIcon

63635

downloadIcon

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));

                 }

 

 

大功告成……您可以在客户端和服务器之间传递原始数据。但我还没有涉及对象或结构。一旦完成,我将更新本文。

 

Java 和 .Net 使用套接字进行互操作 - CodeProject - 代码之家
© . All rights reserved.