मैंने बहुत सारे गुगल किए हैं लेकिन मेरे मुद्दों के साथ बहुत भाग्य नहीं है। मैं नेटवर्क प्रोग्रामिंग के लिए नया हूं और सीखने की कोशिश कर रहा हूं, मैंने एक सरल सर्वर & क्लाइंट स्थापित करने का प्रयास किया है (यहां स्थित एक ऑनलाइन ट्यूटोरियल ->http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server)मैं त्रुटि को कैसे ठीक करूं "प्रत्येक सॉकेट पते (प्रोटोकॉल/नेटवर्क पता/पोर्ट) का केवल एक ही उपयोग सामान्य रूप से अनुमति है"?
मेरे पास यह मुद्दा है कि मैं रखता हूं अपवाद प्राप्त करना "सर्वर पर TcpListener प्रारंभ करने का प्रयास करते समय" प्रत्येक सॉकेट पते (प्रोटोकॉल/नेटवर्क पता/पोर्ट) का केवल एक ही उपयोग होता है "।
मैंने अपनी फ़ायरवॉल को अक्षम करने, बंदरगाह को बदलने के लिए बदलने, चारों ओर चर बदलने के लिए प्रयास किया है, लेकिन कोई फायदा नहीं हुआ है (क्लाइंट ठीक काम करता है, लेकिन यह स्पष्ट रूप से सर्वर नहीं ढूंढ सकता क्योंकि मैं इसे लॉन्च नहीं कर सकता)।
मैंने सॉकेट.पॉल() के उपयोग का वर्णन करने वाले समाधान देखे हैं, लेकिन चूंकि मैं केवल टीसीपीलिस्टर ऑब्जेक्ट का उपयोग कर रहा हूं, मुझे नहीं पता कि पोल फ़ंक्शन का उपयोग कैसे करें।
मेरे कोड:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Text;
namespace ServerTutorial {
class Server {
private readonly Thread m_listenThread;
public Server() {
m_listenThread = new Thread(new ThreadStart(ListenForClients));
m_listenThread.Start();
}
public void ListenForClients() {
var listener = new TcpListener(IPAddress.Any, 3000);
listener.Start();
while (true) {
//Blocks until a client has connected to the server
TcpClient client = listener.AcceptTcpClient();
//Send a message to the client
var encoder = new ASCIIEncoding();
NetworkStream clientStream = client.GetStream();
byte[] buffer = encoder.GetBytes("Hello Client!");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
//Create a thread to handle communication with the connected client
var clientThread = new Thread(new ParameterizedThreadStart(HandleClient));
clientThread.Start(client);
}
}
private void HandleClient(object clientObj) { //Param thread start can only accept object types, hence the cast
var client = (TcpClient) clientObj;
NetworkStream clientStream = client.GetStream();
var message = new byte[4096];
while (true) {
int bytesRead = 0;
try {
//Block until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
} catch {
//A socket error has occurred
System.Diagnostics.Debug.WriteLine("A socket error has occured");
break;
}
if (bytesRead == 0) {
//The client has disconnected from the server
System.Diagnostics.Debug.WriteLine("A client has disconnected from the server");
client.Close();
break;
}
//Message has been received
var encoder = new ASCIIEncoding();
System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
}
}
}
}
अपने मुख्य विधि में:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ServerTutorial {
class Program {
static void Main(string[] args) {
var server = new Server();
server.ListenForClients();
}
}
}
किसी भी मदद की बेहद सराहना की है!
'mingw-w64' पर नोट आपको पोर्ट को मुक्त करने के लिए' closesocket() 'और' बंद() 'की आवश्यकता नहीं है। – Jeroen