问题描述
我想实现在form4上通信,socket,tcp,按键1发送open,按键2发送close但是我的有问题。。哎usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.Net.Sockets;usingSystem.Threading;usingSystem.Net;namespacehh3{publicpartialclassForm3:Form{privatestaticbyte[]result=newbyte[1024];privatestaticintmyProt=8080;//端口staticSocketserverSocket;//privateThreadtd;//privateTcpListenertcpListener;//privatestaticstringmessage="";//privateIPAddressMyIP=IPAddress.Parse("127.0.0.1");publicForm3(){InitializeComponent();timer1.Enabled=true;timer1.Interval=10;}privatevoidForm3_Load(objectsender,EventArgse){//td=newThread(newThreadStart(this.StartListen));stringhostName=Dns.GetHostName();//本机名IPAddressip=IPAddress.Parse("172.26.228.1");System.Net.IPAddress[]addressList=Dns.GetHostAddresses(hostName);//会返回所有地址,包括IPv4和IPv6//IPAddressip=IPAddress.Parse(addressList);serverSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);serverSocket.Bind(newIPEndPoint(ip,myProt));//绑定IP地址:端口serverSocket.Listen(10);//设定最多10个排队连接请求//Console.WriteLine("启动监听{0}成功",serverSocket.LocalEndPoint.ToString());//通过Clientsoket发送数据}privatestaticvoidReceiveMessage(objectclientSocket){SocketmyClientSocket=(Socket)clientSocket;while(true){try{//通过clientSocket接收数据intreceiveNumber=myClientSocket.Receive(result);//Console.WriteLine("接收客户端{0}消息{1}",myClientSocket.RemoteEndPoint.ToString(),Encoding.ASCII.GetString(result,0,receiveNumber));}catch(Exceptionex){Console.WriteLine(ex.Message);myClientSocket.Shutdown(SocketShutdown.Both);myClientSocket.Close();break;}}}privatestaticvoidListenClientConnect1(){SocketclientSocket=serverSocket.Accept();clientSocket.Send(Encoding.ASCII.GetBytes("open"));ThreadreceiveThread1=newThread(ReceiveMessage);receiveThread1.Start(clientSocket);receiveThread1.Abort();//clientSocket.Close();}privatestaticvoidListenClientConnect2(){SocketclientSocket=serverSocket.Accept();clientSocket.Send(Encoding.ASCII.GetBytes("close"));ThreadreceiveThread2=newThread(ReceiveMessage);receiveThread2.Start(clientSocket);receiveThread2.Abort();}privatevoidlabel1_Click(objectsender,EventArgse){}privatevoidtextBox3_TextChanged(objectsender,EventArgse){}privatevoidtimer1_Tick(objectsender,EventArgse){DateTimetime=DateTime.Now;textBox3.Text=time.ToString();}privatevoidbutton1_Click(objectsender,EventArgse){//button1.Enabled=false;//button2.Enabled=true;ThreadmyThread1=newThread(ListenClientConnect1);myThread1.Start();myThread1.Abort();//Console.ReadLine();}privatevoidbutton2_Click(objectsender,EventArgse){//button1.Enabled=true;//button2.Enabled=false;ThreadmyThread2=newThread(ListenClientConnect2);myThread2.Start();myThread2.Abort();//Console.ReadLine();}}}
解决方案
解决方案二:
就是现在和网络调试助手连接后只能发一次数据,第二次就要断开重新连接