-
December 15th, 2011, 02:23 AM
#1
TcpListener not accepting clients
I'll keep it short and simple. Take a look at my source.
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace EDOLOGGER_SERVER
{
public partial class Form1 : Form
{
TcpListener server;
int port = 8888;
IPAddress IP = IPAddress.Parse("192.168.1.114");
string n = Environment.NewLine;
public void start()
{
try
{
textBox1.Text += "in start()" + n;
server = new TcpListener(IP, port);
server.Start();
}
catch (System.Exception e)
{
textBox1.Text += "EXCEPTION: " + e + n;
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text += "Before start()" + n;
start();
textBox1.Text += "After start()" + n;
while (server.Pending() == true)
{
try
{
textBox1.Text += "Listening for request on " + IP + ":" + port;
TcpClient client = server.AcceptTcpClient();
textBox1.Text += "Connection accepted" + n;
}
catch (System.Exception ex)
{
textBox1.Text += ex + n;
}
}
}
}
}
The following code never runs (under "while (server.Pending == true)"):
"Listening for request on " + IP + ":" + port;
"Connection accepted" + n;
My best guess is that I'm using server.Pending incorrectly, but don't know how to correct that. Thanks in advance
-
December 15th, 2011, 03:19 AM
#2
Re: TcpListener not accepting clients
I moved some code around, created buttons for starting the server and and listening for connections, and it works now. Can someone explain why? lol. thanks in advance. New source:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace EDOLOGGER_SERVER
{
public partial class Form1 : Form
{
TcpListener server;
int port = 8888;
IPAddress IP = IPAddress.Parse("192.168.1.114");
string n = Environment.NewLine;
public void start()
{
try
{
textBox1.Text += "in start()" + n;
server = new TcpListener(IP, port);
server.Start();
button1.Enabled = false;
button2.Enabled = true;
button3.Enabled = true;
}
catch (System.Exception e)
{
textBox1.Text += "EXCEPTION: " + e + n;
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text += server.ToString() + n;
textBox1.Invalidate();
textBox1.Refresh();
while (server.Pending() == true)
{
try
{
textBox1.Text += "Listening for request on " + IP + ":" + port;
TcpClient client = server.AcceptTcpClient();
textBox1.Text += "Connection accepted" + n;
}
catch (System.Exception ex)
{
textBox1.Text += ex + n;
}
}
textBox1.Text += "Out of while" + n;
button2.Enabled = false;
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text += "Before start()" + n;
start();
textBox1.Text += "After start()" + n;
}
}
}
-
December 15th, 2011, 09:19 AM
#3
Re: TcpListener not accepting clients
As per documentation: http://msdn.microsoft.com/en-us/libr...r.pending.aspx
That property only returns 'true' if someone has connected to the socket but 'AcceptTcpClient' has not been called. In your case you can either do an asynchronous 'BeginAcceptTcpClient' or a blocking wait by just calling AcceptTcpClient and waiting for someone to connect. You should not have a while loop checking this property unless you keep rechecking even if this returns false (which is what you want).
www.monotorrent.com For all your .NET bittorrent needs
NOTE: My code snippets are just snippets. They demonstrate an idea which can be adapted by you to solve your problem. They are not 100% complete and fully functional solutions equipped with error handling.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|