C# Socket的TCP通信(附案例 21点游戏)
December 09, 2015步骤:
-
建立客户端的Socket.确定主机名和端口
-
发送连接请求到服务端并等待回馈(服务端需要多线程)
-
连接成功后进行数据交流
-
关闭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
最近的作业,做的比较粗糙,别介意.
截图