2010-01-15 41 views
1

我有一個socket服務器是由java編寫的,它總是監聽特定的端口。我用Java編寫了一個客戶端,它可以連接到服務器,但是當我使用C#創建客戶端時,我無法連接到服務器。如何通過套接字將數據從c#客戶端發送到java服務器?

我只想發送一個簡短的值來啓動一個java服務器。

我想問題來自endianess(小端,大端),我有幾天的時間來研究,但不能解決這個問題。

我張貼關於我的問題

我使用java.io. *和java.net的詳細信息。*。我的java代碼

out = new ObjectOutputStream(requestSocket.getOutputStream());
out.flush();
public static final short CLIENT = 0;
out.writeShort(CLIENT);
out.flush();

並與c#,我使用System.Net.Sockets。我的C#代碼如下:

Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
...
short sClient = 0;
if(BitConverter.IsLittleEndian) sClient = IPAddress.HostToNetworkOrder(sClient);

NetworkStream ns = new NetworkStream(socket);
BinaryWriter bw = new BinaryWriter(ns);
bw.Write(sClient);

Java代碼可以連接到Java服務器,但C#代碼不能:(。從Java服務器輸出的錯誤是「異常而變得socket流」

任何人都可以幫我這個問題,在此先感謝

+1

排除排序,只需打印出您收到的短文和您打印的短文。例如,如果你發送的短消息是0x1234,而你收到的短消息是0x3412,那麼這是一個末端問題。如果你沒有收到任何東西或完全不同的東西,那是另一回事。調試只不過是一步一步地排除問題直到你發現問題 – Toad 2010-01-15 08:39:09

回答

1

如果字節順序是你的問題,你應該看看以下兩個鏈接它告訴你如何主機和網絡字節順序

Network to Host order

之間的轉換

Host to network order

希望這會有所幫助。

+0

我已經嘗試了主機到網絡,但無法解決這個問題。 在Java中,我的代碼如下: out.writeShort(CLIENT); (輸出是ObjectOutputStream,客戶端很短) 和我在C#中的代碼: short sClient = 0; if(BitConverter.IsLittleEndian) sClient = IPAddress.HostToNetworkOrder(sClient); 與java代碼,java服務器將返回一個數據包,但與c#代碼,java服務器總是返回「異常,同時獲取套接字流」 希望任何人都可以幫助我,在此先感謝。 – DanCH 2010-01-15 07:45:37

+0

什麼觸發異常? – mdec 2010-01-15 07:46:21

1

服務器是一個服務器,所以你需要更具體。可能有一百萬個原因,他們沒有正確溝通。你可以ping服務器上的機器嗎?它們是在同一臺機器上運行還是可能存在防火牆問題?你是否正在調試每個以查看請求是超時還是被主動拒絕?他們連接,但編碼是錯誤的?

此外,您使用什麼協議?如果您以自定義協議格式發送二進制數據,則可能會擔心內存不足,但大多數協議都期望網絡字節順序。如果存在endianess問題,那麼您需要在調試器中進行驗證。你在Java和.NET中使用哪些cals?你能發佈一些示例代碼嗎?

需要更多信息來解決這個問題。

相關問題