अधिक विशेष रूप से, यदि किसी कंप्यूटर के पास सर्वर है (java.net.ServerSocket
उदाहरण) क्या मैं इसे C# System.Net.Sockets.Socket
इंस्टेंस का उपयोग करके कनेक्ट कर सकता हूं?क्या मैं सिर्फ सॉकेट का उपयोग कर जावा और सी # के बीच संवाद कर सकता हूं?
उत्तर
मुख्य मुद्दा यह है कि आपको भेजे गए डेटा के एन्कोडिंग के साथ आपको बहुत सावधान रहना होगा। यहां कार्यक्रमों की एक जोड़ी है जो एक साथ काम करती है। सी # क्लाइंट एक स्ट्रिंग भेजता है, पहले इसकी लंबाई को पूर्णांक के रूप में भेजकर, और उसके बाद स्ट्रिंग के बाइट भेजता है। जावा सर्वर लंबाई को पढ़ता है, फिर संदेश पढ़ता है और कंसोल पर आउटपुट प्रिंट करता है। फिर एक गूंज संदेश लिखता है, इसकी लंबाई की गणना करता है, बाइट निकालता है और इसे वापस सी # क्लाइंट में भेजता है। क्लाइंट लंबाई, संदेश और एक आउटपुट प्रिंट करता है। सभी bitwise सामान से बचने के लिए एक तरीका होना चाहिए, लेकिन ईमानदारी से मैं इस सामान के साथ थोड़ा सा जंगली हूँ, खासकर जावा पक्ष पर।
एक जावा सर्वर:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class JavaSocket {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(4343, 10);
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// Receiving
byte[] lenBytes = new byte[4];
is.read(lenBytes, 0, 4);
int len = (((lenBytes[3] & 0xff) << 24) | ((lenBytes[2] & 0xff) << 16) |
((lenBytes[1] & 0xff) << 8) | (lenBytes[0] & 0xff));
byte[] receivedBytes = new byte[len];
is.read(receivedBytes, 0, len);
String received = new String(receivedBytes, 0, len);
System.out.println("Server received: " + received);
// Sending
String toSend = "Echo: " + received;
byte[] toSendBytes = toSend.getBytes();
int toSendLen = toSendBytes.length;
byte[] toSendLenBytes = new byte[4];
toSendLenBytes[0] = (byte)(toSendLen & 0xff);
toSendLenBytes[1] = (byte)((toSendLen >> 8) & 0xff);
toSendLenBytes[2] = (byte)((toSendLen >> 16) & 0xff);
toSendLenBytes[3] = (byte)((toSendLen >> 24) & 0xff);
os.write(toSendLenBytes);
os.write(toSendBytes);
socket.close();
serverSocket.close();
}
}
एक सी # ग्राहक:
using System;
using System.Net;
using System.Net.Sockets;
namespace CSharpSocket
{
class MainClass
{
public static void Main (string[] args)
{
string toSend = "Hello!";
IPEndPoint serverAddress = new IPEndPoint(IPAddress.Parse("192.168.0.6"), 4343);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(serverAddress);
// Sending
int toSendLen = System.Text.Encoding.ASCII.GetByteCount(toSend);
byte[] toSendBytes = System.Text.Encoding.ASCII.GetBytes(toSend);
byte[] toSendLenBytes = System.BitConverter.GetBytes(toSendLen);
clientSocket.Send(toSendLenBytes);
clientSocket.Send(toSendBytes);
// Receiving
byte[] rcvLenBytes = new byte[4];
clientSocket.Receive(rcvLenBytes);
int rcvLen = System.BitConverter.ToInt32(rcvLenBytes, 0);
byte[] rcvBytes = new byte[rcvLen];
clientSocket.Receive(rcvBytes);
String rcv = System.Text.Encoding.ASCII.GetString(rcvBytes);
Console.WriteLine("Client received: " + rcv);
clientSocket.Close();
}
}
}
जीजे ने काम किया, एक आसान कहानी जानने के लिए बहुत समय बचाया – azuneca
एक आशाजनक रूप से दिलचस्प एक तरफ के रूप में, जावा के पास एक हस्ताक्षरित संख्या आदिम है, लेकिन यह 16 बिट है, 8 नहीं। हमारा पुराना पसंदीदा char एक हस्ताक्षरित 16-बिट है सब के बाद संख्या। यही कारण है कि [Character.toChars (int)] (https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#toChars%28int%29) वर्णों की एक सरणी देता है, पूरे यूटीएफ -16 शेनानिगन्स सामान के कारण। –
- 1. क्या मैं प्रोग्रेस मॉनिटर संवाद मोडल कर सकता हूं?
- 2. मैं सीमेंस एस 7-1200 और पायथन के बीच कैसे संवाद कर सकता हूं?
- 3. जावा 6 का प्रयोग, लिनक्स पर मैं आईपीवी 4 सॉकेट का उपयोग कैसे कर सकता हूं?
- 4. क्या मैं अनंत सीमा का उपयोग कर सकता हूं और इसे संचालित कर सकता हूं?
- 5. मैं HTML का उपयोग कर पाठ के ओवरलैपिंग सेगमेंट के बीच अंतर कैसे कर सकता हूं?
- 6. क्या मैं log4j का उपयोग कर जावा विधि के भीतर लॉगिंग स्तर सेट कर सकता हूं?
- 7. क्या मैं जावा के HttpUrlConnection क्लास का उपयोग कर होस्ट हेडर को ओवरराइड कर सकता हूं?
- 8. मैं जावा में जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं?
- 9. क्या मैं सिर्फ एंड्रॉइड ऐप में एफएफएमपीईजी से पुस्तकालयों का उपयोग कर सकता हूं?
- 10. क्या मैं जेएनआई का उपयोग कर जावा कोड में सी ++ ऑब्जेक्ट्स का संदर्भ दे सकता हूं?
- 11. मैं जावास्क्रिप्ट से टीसीपी सॉकेट पर कैसे संवाद कर सकता हूं?
- 12. क्या मैं जीएई पर वसंत का उपयोग कर सकता हूं?
- 13. JQuery: क्या मैं बाहरी वेब पेज खोलने के लिए एक संवाद का उपयोग कर सकता हूं?
- 14. मैं "।" का उपयोग कैसे कर सकता हूं जावा
- 15. क्या मैं इंटेलिज आइडिया का उपयोग कर ग्रीनफुट के लिए विकसित कर सकता हूं?
- 16. क्या मैं सी # का उपयोग कर फ़ॉर्म के 'क्लोज़' बटन को अक्षम कर सकता हूं?
- 17. मैं सी # में डीबग्रेक() का उपयोग कैसे कर सकता हूं?
- 18. मैं सॉकेट के लिए आईपीकॉमपी कैसे चालू कर सकता हूं?
- 19. क्या मैं एकाधिक "साथ" का उपयोग कर सकता हूं?
- 20. क्या मैं डेटाबेस के बिना रेल का उपयोग कर सकता हूं और केवल वेब सेवाओं को कॉल कर सकता हूं?
- 21. क्या मैं एक ही असेंबली में सी # और सी ++/सीएलआई दोनों का उपयोग कर सकता हूं?
- 22. मैं सी # में GetNextWindow() का उपयोग कैसे कर सकता हूं?
- 23. क्या मैं सी ++, सी में एंड्रॉइड प्रोग्रामिंग कर सकता हूं?
- 24. मैं सी ++ में mysql का उपयोग कैसे कर सकता हूं?
- 25. क्या मैं किसी भी जेवीएम भाषा का उपयोग कर एंड्रॉइड के लिए प्रोग्राम कर सकता हूं?
- 26. मैं एक सीरियल पोर्ट के साथ कैसे कॉन्फ़िगर और संवाद कर सकता हूं?
- 27. तोता - क्या मैं इसका उपयोग कर सकता हूं? और कैसे?
- 28. मैं सी # का उपयोग कर स्क्रीन को कैसे लॉक कर सकता हूं?
- 29. सबप्रोसेस पॉपन और कॉल (मैं उनका उपयोग कैसे कर सकता हूं) के बीच क्या अंतर है?
- 30. क्या मैं एंड्रॉइड पर jmonkeyengine का उपयोग कर सकता हूं?
हां। वे बाइट पढ़ने के लिए उबालते हैं, जो भाषा तटस्थ होते हैं (कमजोर चेतावनी से कम है कि जावा ने बाइट की तरह सी # को हस्ताक्षर नहीं किया है)। – pickypg
हां, इस उत्तर को देखें (ब्लू जीन द्वारा एक): http://stackoverflow.com/questions/5999180/sockets-send-strings-from-java-to-c – damix911
@ damix911 आप निर्देशिका को लिंक कर सकते हैं उत्तर, उदाहरण के लिए, [ब्लू जीन का जवाब] (http://stackoverflow.com/a/6001758/438992)। –