2.具体分析:
- 对于 send() 和 receive() 函数就不过多赘述,主要分析一下 listen() 函数,listen() 函数其实是一个监听函数,只有监听成功之后才能够连接,才可以实例化一个发送Socket对象和一个接收Thread对象,而服务器端也是单例模式的,与客户端结构基本相同 。
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.问题分析:- 在本项目中单例化对象中,对单例化思想并不清楚, 求助于舍友,在他的帮助下明白了,对象没有就创建,有的话就直接返回已经创建的对象 。
- 在引用实例化对象的函数时,搞不清楚使用的位置,经过多次试错,多次调整,才明白使用逻辑
- 开始使用 receive() 这一函数时,以为其必须进行调用才行,后来才知道其在对象线程中一直存在,根本不需要调用 。
经验总结扩展阅读
- 水果能带上飞机吗
- 机长一月工资多少钱 飞机机长的未来发展怎么样
- uniapp之uni-starter小程序多端研发框架搭建与项目实践
- MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选
- 空气炸锅炸鸡排多长时间多少度
- 👍SpringSecurity单体项目最佳实践
- 飞机上可以带充电宝吗
- 飞机延误多久可以赔偿
- 飞机上可以化妆吗?
- 煤气怎么会爆炸