111,126
社区成员
发帖
与我相关
我的任务
分享
public void StartServer()
{
ServerThread = new Thread(new ThreadStart(startServer));
ServerThread.Start();
}
private void startServer()
{
IPAddress myIP = Dns.GetHostAddresses(Dns.GetHostName())[0];
Listener = new TcpListener(myIP,Port);
Listener.Start();
while(isStart)
{
try
{
MySocket = Listener.AcceptSocket();
}
catch
{
//经常抛出异常,无法处理
}
System.Net.EndPoint tempRemoteEP = MySocket.RemoteEndPoint;
byte[] tempBuffer = new byte[BUFFER_SIZE];
int len = 0, hasRecived = 0;
try
{
ReceiveFileStream = new FileStream(Att.FileSaveName, FileMode.Create, FileAccess.Write);
do
{
len = MySocket.ReceiveFrom(tempBuffer, ref tempRemoteEP);
ReceiveFileStream.Write(tempBuffer, 0, len);
hasRecived += len;
} while (len > 0);
MessageBox.Show("完成!"); //这里的代码经常访问不到 }
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.ToString());
}
finally
{
ReceiveFileStream.Close();
MySocket.Close();
}
}
}
/// <summary>
/// 接受新的客户端连接
/// </summary>
/// <param name="result"></param>
private void DoClientConnectedCallBack(IAsyncResult result) {
TcpListener listener = result.AsyncState as TcpListener;
TcpClient client = null;
try {
client = listener.EndAcceptTcpClient(result);
} catch {
} finally {
_clientconnected.Set();
}
if (client != null) {
ProcessClient(client); /* 处理与客户端的交互 */
client.Close();
}
}
Thread _listenthread = null;
bool _onStopping = false;
TcpListener _server = null;
ManualResetEvent _clientconnected = new ManualResetEvent(false);
/// <summary>
/// 侦听主线程
/// </summary>
private void ListeningMain() {
_server = new TcpListener(hostip, Port);
_server.Start();
while (!_onStopping) {
_clientconnected.Reset();
_server.BeginAcceptTcpClient(new AsyncCallback(DoClientConnectedCallBack), _server);
_clientconnected.WaitOne();
}
}
/// <summary>
/// 关闭侦听端口
/// </summary>
private void ClearSocket() {
try {
_clientconnected.Set();
} catch {
}
if (_server != null) {
try {
_server.Stop();
} catch {
}
}
}
/// <summary>
/// 关闭侦听端口和侦听线程
/// </summary>
private void ShutdownListenThread() {
_onStopping = true;
ClearSocket();
if (_listenthread != null) {
if (_listenthread.ThreadState == ThreadState.Running) {
_listenthread.Abort();
_listenthread.Join(3 * 1000);
}
}
}
/// <summary>
/// 启动侦听线程
/// </summary>
private void StartListenThread() {
ShutdownListenThread();
_onStopping = false;
_listenthread = new Thread(new ThreadStart(ListeningMain));
_listenthread.Start();
}