C# Socket的TCP通信(附案例 21点游戏)

2015/12/09 Csharp

步骤:

  1.      建立客户端的Socket.确定主机名和端口

  2.      发送连接请求到服务端并等待回馈(服务端需要多线程)

  3.      连接成功后进行数据交流

  4.      关闭Socket

服务端:(监听)

class="brush:c#;toolbar:false">this.listener=new AsynSocketListener(this.cmbAddress.Text,Convert.ToInt32(this.txtPort.Text));  
listener.Onread += new On_read(listener_Onread);  
listener.ShowInfo += new Show_Info(Show_info);  
//监听线程  
Thread tdListen = new Thread(listener.TxtListen);  
tdListen.Name = "tdListen";  
tdListen.Start();  

需要注意的是,服务端在处理客户端的消息时,比如对消息输出或者其他对ui的操作,需要创建新的线程.

如:

//接收到的信息contentStr 显示到txtcontent  

Invoke(new Set_ContentText(GetContent), contentStr);  
private void GetContent(string contentStr)  

        {  

            this.txtContent.Text += contentStr + Environment.NewLine;  

        }  
//这里使用了Invoke  

客户端:

   public static string Start(string txtContent, string ipAdress, string portStr)  
            {  
                int port = Convert.ToInt32(portStr);  
                TcpClient tcpclnt = new TcpClient();            
                // 连接服务器  
                try  
                {  
                    tcpclnt.Connect(ipAdress, port);  
                    // 得到客户端的流  
                    Stream stm = tcpclnt.GetStream();  
    // 发送字符串  
    
                    UTF8Encoding asen = new UTF8Encoding();  
    
                    byte[] ba = asen.GetBytes(txtContent);  
    
                    stm.Write(ba, 0, ba.Length);  
    // 接收从服务器返回的信息  
    
                    byte[] stream = new byte[1024];  
    
                    int k = stm.Read(stream, 0, 1024);  
    // 关闭客户端连接  
    
                    tcpclnt.Close();  
    
                    //获得返回消息  
    
                    string message = System.Text.Encoding.UTF8.GetString(stream, 0, k);  
    
                    //输出返回消息  
    
                    return message;  
        }  
    
                catch (Exception ex)  
    
                {  
    
                    return ex.Message;  
    
                }  
    
            }  
  • 案例:
    规则是 JQK为10点. 1-10为相应的点数.其中1也就是Ace(A)可以作为1点也可以作为10点.
    玩家或者电脑超过21点视为爆掉.输.

下载地址:http://pan.baidu.com/s/1o7qNgSi

最近的作业,做的比较粗糙,别介意.

截图

blob.png

blob.png

blob.png