Я просто начинающий программист на сокетах. Я попробовал простой код из PDF-книги "Сокеты TCP / IP в C # Практическое руководство для программистов", но он не работает. Я скомпилировал его в Visual Studio 2010. Пожалуйста, помогите мне, что неправильно и вот полный код
using System; // For Console, Int32, ArgumentException, Environment
using System.Net; // For IPAddress
using System.Net.Sockets; // For TcpListener, TcpClient
class TcpEchoServer {
private const int BUFSIZE = 32; // Size of receive buffer
static void Main(string[] args) {
if (args.Length > 1) // Test for correct # of args
throw new ArgumentException("Parameters: [<Port>]");
int servPort = (args.Length == 1) ? Int32.Parse(args[0]): 7;
TcpListener listener = null;
try {
// Create a TCPListener to accept client connections
listener = new TcpListener(IPAddress.Any, servPort);
listener.Start();
} catch (SocketException se) {
Console.WriteLine(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
}
byte[] rcvBuffer = new byte[BUFSIZE]; // Receive buffer
int bytesRcvd; // Received byte count
for (;;) { // Run forever, accepting and servicing connections
TcpClient client = null;
NetworkStream netStream = null;
try {
client = listener.AcceptTcpClient(); // Get client connection
netStream = client.GetStream();
Console.Write("Handling client - ");
// Receive until client closes connection, indicated by 0 return value
int totalBytesEchoed = 0;
while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0) {
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}
Console.WriteLine("echoed {0} bytes.", totalBytesEchoed);
// Close the stream and socket. We are done with this client!
netStream.Close();
client.Close();
} catch (Exception e) {
Console.WriteLine(e.Message);
netStream.Close();
}
}
}
}
Из комментария:
У меня есть программа для клиента, которая также может подключиться к этой серверной программе. Актуальная проблема в том, что эта серверная программа не запускается. В строке 16-22 есть код try
{ // Create a TCPListener to accept client connections
listener = new TcpListener(IPAddress.Any, servPort);
listener.Start();
}
catch (SocketException se)
{
Console.WriteLine(se.ErrorCode + ": " + se.Message);
Environment.Exit(se.ErrorCode);
}
и программа показывает код ошибки и отображает сообщение, подобное этому
10048: обычно допускается только одно использование каждого адреса сокета
и закрытие программы. Что делать?