Iam just a beginner student socket programming.I tried a simple code from “TCP/IP Sockets in C# Practical Guide for Programmers” pdf book but it doesn’t work.I compiled it in visual studio 2010.Please help me what is wrong and here is the complete code
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();
}
}
}
}
From Comment:
I have program for client also to connect with this server program. Actual problem is this server program does not run. At line 16-22 there is the code 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);
}
and program show the error code and displays message like this
10048:Only one usage of each socket address is normally permitted
and program close. What to do?
If you used Visual Studio 2010 to compile and run this (via Debug), you should set up command line arguments as your code requires them.
If you already did run your program with command line arguments (either through console or by setting them up in VS), then please give a more detailed explanation of why it doesn’t work.
To set up command line arguments, right click on your project in Solution Explorer -> Properties, then in Debug tab, type a value representing a port in the Command Line Arguments field. No spaces, only one value.