判断多线程还是单线程
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;
using System.Net.Sockets;
using System.Collections;
using System.Windows;
namespace ServerTCP
{
public partial class Form1 : Form
{
//Socket ServerSocket;
//Socket ConnectedSocket;
TcpListener serTcpSocket;
ArrayList ConnectArrayList;
byte[] sendBuffer;
byte[] recvBuffer;
string username;
string clientusername;
public Form1()
{
InitializeComponent();
ConnectArrayList = new ArrayList();
recvBuffer = new byte[1024];
richTextBoxReceive.Clear();
buttonStop.Enabled = false;
buttonSend.Enabled = false;
}
private void buttonStart_Click(object sender, EventArgs e)
{
buttonStart.Enabled = false;
buttonStop.Enabled = true;
//ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
IPAddress myip = IPAddress.Parse("127.0.0.1");
IPEndPoint myEndPoint = new IPEndPoint(myip, 8090);
//ServerSocket.Bind(myEndPoint);
//ServerSocket.Listen(10);
serTcpSocket =new TcpListener (myEndPoint);
serTcpSocket.Start(10);
listBoxStatus.Items.Add("正在监听中......");
timerAccept.Enabled = true;
buttonSend.Enabled = true;
//buttonStart.Enabled = false;
}
private void buttonStop_Click(object sender, EventArgs e)
{
serTcpSocket.Stop();
for (int i = 0; i < ConnectArrayList.Count; i++)
{
((User)ConnectArrayList[i]).connectSocket.Close();
}
listBoxStatus.Items.Add("已停止监听~");
buttonStart.Enabled = true;
buttonStop.Enabled = false;
buttonSend.Enabled = false;
comboBoxSend.Items.Clear();
comboBoxSend.Text = "";
ConnectArrayList.Clear();
timerAccept.Enabled = false;
timerReceive.Enabled = false;
}
private void buttonSend_Click(object sender, EventArgs e)
{
sendBuffer = System.Text.Encoding.UTF8.GetBytes("SAID" +
richTextBoxSend.Text);
int index = comboBoxSend.SelectedIndex;
if (richTextBoxSend.Text == "")
{
MessageBox.Show("发送信息不能为空","错误
",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
if (index == -1)
{
MessageBox.Show("请选择接收方~");
}
else
{
try
{
((User)ConnectArrayList[index]).connectNetworkStream.Write(sendBuffer, 0, sendBuffer.Length);
richTextBoxSend.Clear();
}
catch (Exception ex)
{
listBoxStatus.Items.Add(((User)ConnectArrayList[index]).connectSocket.RemoteEndPoint +
ex.Message);
ConnectArrayList.RemoveAt(index);
comboBoxSend.Items.RemoveAt(index);
comboBoxSend.Text = "";
}
}
}
}
private void timerAccept_Tick(object sender, EventArgs e)
{
Socket ConnectedSocket;
//TcpClient ConnectedTcpSocket;
if (serTcpSocket.Pending())
{
ConnectedSocket = serTcpSocket.AcceptSocket();
//ConnectedTcpSocket = serTcpSocket.AcceptTcpClient();
User oneuser = new User(ConnectedSocket);
ConnectArrayList.Add(oneuser);
//comboBoxSend.Items.Add(ConnectedSocket.RemoteEndPoint);
}
if (ConnectArrayList.Count > 0 && !timerReceive.Enabled)
{
timerReceive.Enabled = true;
}
}
private void timerReceive_Tick(object sender, EventArgs e)
{
for (int i = 0; i < ConnectArrayList.Count; i++)
{
if (((User)ConnectArrayList[i]).connectSocket.Poll(10, SelectMode.SelectRead))
{
if (((User)ConnectArrayList[i]).connectNetworkStream.DataAvailable)
{
int received =
((User)ConnectArrayList[i]).connectNetworkStream.Read(recvBuffer, 0, recvBuffer.Length);
string str = System.Text.Encoding.UTF8.GetString(recvBuffer, 0, received);
string pd = str[0].ToString() + str[1].ToString() + str[2].ToString() +
str[3].ToString();
if (pd == "SAID")
{
str = str.Substring(4);
str += "\r";
richTextBoxReceive.Text +=
((User)ConnectArrayList[i]).nickname + " 说:\n\t" + str;
}
else if (pd == "NICK")
{
clientusername = str.Substring(4);
if (((User)ConnectArrayList[i]).nickname == null)
{
((User)ConnectArrayList[i]).nickname = clientusername;
listBoxStatus.Items.Add(string.Format("{0}({1})连接上
来", clientusername,((User)ConnectArrayList[i]).connectSocket.RemoteEndPoint));
comboBoxSend.Items.Add(clientusername + "(" + ((User)ConnectArrayList[i]).connectSocket.RemoteEndPoint + ")");
sendBuffer =
System.Text.Encoding.UTF8.GetBytes("NICK" + username);
((User)ConnectArrayList[i]).connectNetworkStream.Write(sendBuffer, 0, sendBuffer.Length);
}
else
{
User one = new
User(((User)ConnectArrayList[i]).connectSocket);
comboBoxSend.Items.RemoveAt(i);
ConnectArrayList.RemoveAt(i);
one.nickname = clientusername;
ConnectArrayList.Add(one);
comboBoxSend.Text = "";
comboBoxSend.Items.Add(clientusername + "(" +
one.connectSocket.RemoteEndPoint + ")");
}
}
}
else
{
listBoxStatus.Items.Add(string.Format("{0}({1})掉线",
((User)ConnectArrayList[i]).nickname,((User)ConnectArrayList[i]).connectSocket.RemoteEndPoi
nt));
((User)ConnectArrayList[i]).connectSocket.Close();//TCP三步握
手,四步关闭
ConnectArrayList.RemoveAt(i);
comboBoxSend.Items.RemoveAt(i);
comboBoxSend.Text = "";
}
}
}
}
private void sendnickname(string newnickname)
{
int i;
for (i = 0; i < ConnectArrayList.Count; i++)
{
if (((User)ConnectArrayList[i]).connectSocket.Poll(10, SelectMode.SelectWrite))
{
sendBuffer = System.Text.Encoding.UTF8.GetBytes("NICK" +
newnickname);
((User)ConnectArrayList[i]).connectNetworkStream.Write(sendBuffer, 0,
sendBuffer.Length);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
if (UserSetting.ReadNickName(out username) == -1)
{
Application.Exit();
}
else
{
this.Text = "服务端------" + username;
this.notifyIcon1.Text = username;
}
}
private void 更改昵称ToolStripMenuItem_Click(object sender, EventArgs e)
{
modifiynickname modiynick = new modifiynickname();
modiynick.ShowDialog();
UserSetting.modifiynickname = true;
timerNickname.Enabled = true;
}
private void timerNickname_Tick(object sender, EventArgs e)
{
if (UserSetting.modifiynickname)
{
if (UserSetting.modifiynicknamepd)
{
string newnickname;
UserSetting.ReadNickName(out newnickname);
if (newnickname != username)
{
username = newnickname;
_ChangeCaption(newnickname);
sendnickname(newnickname);
timerNickname.Enabled = false;
}
}
}
else
timerNickname.Enabled = false;
}
private void _ChangeCaption(string caption)
{
this.Text = "服务端------" + caption;
this.notifyIcon1.Text = caption;
}
private void 退出程序ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}