/ / चैट के लिए NetworkStream (सॉकेट) के माध्यम से लेखन / रीडिंग स्ट्रिंग - सी #, स्ट्रिंग, सॉकेट्स, चैट, नेटवर्कस्ट्रीम

एक चैट - सी #, स्ट्रिंग, सॉकेट, चैट, नेटवर्कस्ट्रीम के लिए NetworkStream (सॉकेट) के माध्यम से लेखन / पढ़ना स्ट्रिंग

क्षमा करें यदि यह समझना कठिन है, तो पहली बार C # को आज़मा कर देखें।

मैं एक साधारण सार्वजनिक "चैट" बनाने की कोशिश कर रहा हूँक्लाइंट के बीच जो सर्वर से जुड़े होते हैं। मैंने सर्वर पर पूर्णांक पास करने और उन्हें प्रिंट करने की कोशिश की और सब कुछ ठीक था, हालांकि, जब मैंने तार को स्विच किया, तो ऐसा लगता है कि यह केवल 1 चरित्र को पारित कर सकता है (क्योंकि ns.Write(converted, 0, 1);) का है। अगर मैं ns बढ़ाता हूँ ns.Write(converted,0,10) जब मैं 10 वर्णों से कम का संदेश दर्ज करता हूं तो सब कुछ क्रैश हो जाता है (क्लाइंट और सर्वर दोनों)।

सर्वर कोड:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net.Sockets;


namespace MultiServeris
{
class Multiserveris
{
static void Main(string[] args)
{
TcpListener ServerSocket = new TcpListener(1000);
ServerSocket.Start();
Console.WriteLine("Server started");
while (true)
{
TcpClient clientSocket = ServerSocket.AcceptTcpClient();
handleClient client = new handleClient();
client.startClient(clientSocket);
}
}
}

public class handleClient
{
TcpClient clientSocket;
public void startClient(TcpClient inClientSocket)
{
this.clientSocket = inClientSocket;
Thread ctThread = new Thread(Chat);
ctThread.Start();
}
private void Chat()
{
byte[] buffer = new byte[10];
while (true)
{
NetworkStream ns = clientSocket.GetStream();
ns.Read(buffer,0,1);
string line = Encoding.UTF8.GetString(buffer);
Console.WriteLine(line);
}
}
}
}

क्लाइंट कोड:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;

namespace Klientas
{
class Klientas
{
static void Main(string[] args)
{
while (true)
{
TcpClient clientSocket = new TcpClient("localhost", 1000);
NetworkStream ns = clientSocket.GetStream();
byte[] buffer = new byte[10];
string str = Console.ReadLine();
byte[] converted = System.Text.Encoding.UTF8.GetBytes(str);
ns.Write(converted, 0, 1);
}
}
}
}

उत्तर:

जवाब के लिए 8 № 1

आप बाइनरीरीडर / बाइनरीविटर कक्षाओं का उपयोग करके डेटा को सही ढंग से प्रारूपित करने और पढ़ने के लिए सर्वश्रेष्ठ हैं। यह स्वयं को संसाधित करने की आवश्यकता को हटा देता है। उदाहरण के लिए क्लाइंट करें:

BinaryWriter writer = new BinaryWriter(clientSocket.GetStream());
writer.Write(str);

और सर्वर में:

BinaryReader reader = new BinaryReader(clientSocket.GetStream());
Console.WriteLine(reader.ReadString());

जवाब के लिए 3 № 2

जब एक ही स्ट्रीम पर BinaryReader या BinaryWriter का उपयोग किया जाता है, और आपके पास .NET फ्रेमवर्क संस्करण 4.5 या उससे ऊपर है, तो ओवरलोड का उपयोग करके अंतर्निहित स्ट्रीम को खुला छोड़ना सुनिश्चित करें:

using (var w = new BinaryWriter(stream, Encoding.UTF8, true)) {}