我是初接触C#与Soket...最近想开发一套简单的通讯软件
我用做Clien与Server
看了很多资料,了解了Server端,只要开放一个端口,就能工作
我觉得很怪...
如下面:
server = new TcpListener(localAddr, port);
server.Start();
NetworkStream networkStream;
while (true)
{
TcpClient client = server.AcceptTcpClient();
}而很多软件都是公开它的localAddr与port
如果这样...别人是否能与一个连接这个服务IP与端口,然后送数据过去,这样..会不会造成网络堵塞了?????不知道明不明白我的问题..呵如果你知道我的软件的连接IP与端口...你是否能开发一个软件,一直来连接,还传送一些数据来堵塞我的网络了?
我用做Clien与Server
看了很多资料,了解了Server端,只要开放一个端口,就能工作
我觉得很怪...
如下面:
server = new TcpListener(localAddr, port);
server.Start();
NetworkStream networkStream;
while (true)
{
TcpClient client = server.AcceptTcpClient();
}而很多软件都是公开它的localAddr与port
如果这样...别人是否能与一个连接这个服务IP与端口,然后送数据过去,这样..会不会造成网络堵塞了?????不知道明不明白我的问题..呵如果你知道我的软件的连接IP与端口...你是否能开发一个软件,一直来连接,还传送一些数据来堵塞我的网络了?
{
TcpClient client = server.AcceptTcpClient();
}
死循环??
换个想法,把socket设置为异步套接字,或者加个线程来做服务器,那样你就不会碰到网络堵塞了
mListener.Start();
while (mRunning) {
try {
TcpClient client = mListener.AcceptTcpClient();
client.Client.NoDelay = true;
if (ClientAccepted != null) {
//同步调用
//ClientAccepted(this, new StreamReaderWriter(client));
//异步单播调用
ClientAccepted.BeginInvoke(this, new StreamReaderWriter(client), new AsyncCallback(ProcessClient), client);
//client.Close();
}
//bool b= mListener.Pending();
//mListener.Server.Close();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
class NetListener:IDisposable {
//mListener; public void Start() {
//循环监听
mRunning = true;
TcpListener mListener = new TcpListener(new IPEndPoint(mAddress, mPort));
mListener.Start();
while (mRunning) {
try {
TcpClient client = mListener.AcceptTcpClient();
client.Client.NoDelay = true;
if (ClientAccepted != null) {
//TODO:此处可以改为异步以保证能够及时响应请求
//ClientAccepted(this, new StreamReaderWriter(client));
ClientAccepted.BeginInvoke(this, new StreamReaderWriter(client), new AsyncCallback(ProcessClient), client);
//client.Close();
}
//bool b= mListener.Pending();
//mListener.Server.Close();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
mListener.Stop();
//mListener.Stop();
//mListener.
}
private void ProcessClient(IAsyncResult result) {
}
private int mPort;
bool mRunning = false;
public int Port {
get { return mPort; }
set { mPort = value; }
}
private IPAddress mAddress; public IPAddress Address {
get { return mAddress; }
set { mAddress = value; }
}
public void Stop() {
mRunning = false;
}
public event AcceptClient ClientAccepted;
#region IDisposable 成员
public void Dispose() {
} #endregion
}
}