ҳü private byte[] _receiveData = new byte[1024]; private string _username; private string _password; private bool _needPasswordl; private bool _passwordWrong; public TcpServerForm() {
InitializeComponent(); }
private void TcpReceiveForm_Load(object sender, EventArgs e) {
IPAddress[] addressList = Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in addressList) {
if (ip.ToString().Length <= 15)
lbNativeIP.Items.Insert(0, ip.ToString()); }
btnDisconnect.Enabled = false; }
private void btnListen_Click(object sender, EventArgs e) {
_username = txtUserName.Text;
_password = txtPassword.Text; //ÉèÖÃÓû§ÃûÓëÃÜÂë
_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//н¨ÐÒéΪtcpµÄsocket
_server.Bind(new IPEndPoint(IPAddress.Any, 8000));//¼àÌý¶Ë¿ÚΪ8000 _server.Listen(5);//¿ªÊ¼¼àÌý
_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server);//Òì²½µ÷ÓÃ,¿ªÊ¼½ÓÊÕÁ¬½Ó
this.lblStatus.Text = \¿ªÊ¼¼àÌý...\;
9 / 22
ҳü btnListen.Enabled = false; txtUserName.Enabled = false; txtPassword.Enabled = false; _needPasswordl = true;
_passwordWrong = false;//´¦ÀíÂß¼ }
private void btnDisconnect_Click(object sender, EventArgs e) {
_client.Close(); _needPasswordl = true;
_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server); this.lblStatus.Text = \¿ªÊ¼¼àÌý...\; }
void AcceptedConnection(IAsyncResult iar) {
_client = ((Socket)iar.AsyncState).EndAccept(iar);//ÖÕÖ¹½ÓÊÕÁ¬½Ó
this.lblStatus.Text = \Á¬½Óµ½:\ + _client.RemoteEndPoint.ToString();//½âÎö¶Ô·½µØÖ·Óë¶Ë¿Ú byte[] sendMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \Çë·¢ËÍÓû§ÓëÃÜÂë\);//Ïò¿Í»§¶ËÌá³ö·¢ËÍÃÜÂëµÄÇëÇó
lbConnectLog.Items.Insert(0, \Á¬½Óµ½:\ + _client.RemoteEndPoint.ToString()); _client.BeginSend(sendMessage, 0, sendMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client);//Òì²½µ÷ÓÃ,ÏûÏ¢·¢ËÍÍê±ÏÖ´ÐÐSentData btnDisconnect.Enabled = true; }
void ReceivedData(IAsyncResult iar) {
_client = (Socket)iar.AsyncState; int recv = 0; try {
10 / 22
ҳü recv = _client.EndReceive(iar); } catch {
ProcessDisconnection(); }//½âÎöÏûÏ¢
if (recv == 0)//½âÎöʧ°Ü {
_client.Close();
this.lblStatus.Text = \µÈ´ýÁ¬½Ó...\;
_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server); return; }
string receiveMessage = Encoding.Default.GetString(_receiveData, 0, recv); this.lbMessage.Items.Insert(0,receiveMessage);//½«ÏûÏ¢·ÅÈëÏûÏ¢Áбí byte[] feedbackMessage; if(_needPasswordl) {
string receiveUsername = receiveMessage.Substring(receiveMessage.LastIndexOf(\) + 1, receiveMessage.IndexOf(\) - (receiveMessage.LastIndexOf(\) + 1));
string receivePassword = receiveMessage.Substring(receiveMessage.IndexOf(\) + 1, receiveMessage.Length - (receiveMessage.IndexOf(\) + 1)); if(receiveUsername == _username && receivePassword == _password) {
_needPasswordl = false; _passwordWrong = false;
feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \ÑéÖ¤³É¹¦_\ + receiveMessage);
_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client);
11 / 22
ҳü return; } else {
this.lbConnectLog.Items.Insert(0, receiveUsername + \ + receivePassword + \Ñé֤ʧ°Ü\); feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \Ñé֤ʧ°Ü_\ + receiveMessage); _passwordWrong = true;
_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client); return; } }
feedbackMessage = Encoding.Default.GetBytes(DateTime.Now.TimeOfDay + \³É¹¦½ÓÊÕ\ + receiveMessage);
_client.BeginSend(feedbackMessage, 0, feedbackMessage.Length, SocketFlags.None, new AsyncCallback(SentData), _client); }
void SentData(IAsyncResult iar) {
_client = (Socket)iar.AsyncState; int sent = _client.EndSend(iar); if (_passwordWrong) {
lbConnectLog.Items.Insert(0, \Ö÷¶¯¶Ï¿ªÁ¬½Ó\ + _client.RemoteEndPoint.ToString()); _client.Close(); _needPasswordl = true;
_server.BeginAccept(new AsyncCallback(AcceptedConnection), _server);//ÖØÐ¿ªÊ¼½ÓÊÕеÄÁ¬½Ó
ProcessDisconnection();
12 / 22

