C#实践炸飞机socket通信( 三 )

2.具体分析:

  1. 对于 send() 和 receive() 函数就不过多赘述,主要分析一下 listen() 函数,listen() 函数其实是一个监听函数,只有监听成功之后才能够连接,才可以实例化一个发送Socket对象和一个接收Thread对象,而服务器端也是单例模式的,与客户端结构基本相同 。
四、对服务器类和客户类的具体使用1.代码部分(部分代码,不能直接使用,注释部分即内容)private void button2_Click(object sender, EventArgs e){if (Plane_Sum < 3){label4.Text = "请先放置坤坤";}else{if(ipok && portok){label4.Text = "坤坤已放置好";label3.Text = "你的回合";client = Client.clientsocket(ip,port); //实例化客户端serorcli = true;}else{label4.Text = "没有输入ip或者端口";}}}private void button1_Click(object sender, EventArgs e){if (Plane_Sum < 3){label4.Text = "请先放置坤坤";}else{if(ipok && portok){label4.Text = "坤坤已放置好";label3.Text = "对手回合";server = Server.serversocket(ip, port); //实例化服务器端serorcli = false;}else{label4.Text = "没有输入ip或者端口";}}}private void button3_Click(object sender, EventArgs e){if (Plane_Sum < 3){label4.Text = "请先放置坤坤";}else{if (serorcli == false&&ipok&&portok){while (server.receivestr == null) { }//判断有没有接收,直到有接收才可以跳出循环if (server.receivestr[0] == '0')//接收直接使用,由于接收是处于一直接收的状态{PutKunKun2(server.receivestr[1] - '0', server.receivestr[2] - '0');server.Send(1, Board1[server.receivestr[1] - '0', server.receivestr[2] - '0'], 0);//发送调用server.receivestr = null;//赋值为null,为下一次接收做准备}}}}private void textBox1_ipChanged(object sender, EventArgs e){ip = textBox1.Text; //输入ipipok = true;}private void textBox2_portChanged(object sender, EventArgs e){int.TryParse(textBox2.Text,out port); //输入portportok = true;}五、问题分析与总结1.问题分析:
  1. 在本项目中单例化对象中,对单例化思想并不清楚, 求助于舍友,在他的帮助下明白了,对象没有就创建,有的话就直接返回已经创建的对象 。
  2. 在引用实例化对象的函数时,搞不清楚使用的位置,经过多次试错,多次调整,才明白使用逻辑
  3. 开始使用 receive() 这一函数时,以为其必须进行调用才行,后来才知道其在对象线程中一直存在,根本不需要调用 。
2.总结:【C#实践炸飞机socket通信】在这个项目中,我对计算机网络中学习的内容有了更深的理解,对Socket通信有了更深的认识,对TCP和UDP也有了不同于书本单薄的理解 。

经验总结扩展阅读