做客户端和服务端之间的通讯,我在做客户端的时候,想在发起连接的时候开启一个线程用于连接服务端,然后发起连接成功后,就开启线程来接收服务端的消息。我是这样做的:在一个连接的按钮下直接threadConnect.start(),然后下面紧接着是threadReceive.Start();然后我F5调试发现,程序没有执行threadConnect.start()线程,而是只执行了threadReceive.Start(),当然这样做肯定报错了,因为还没有和服务端连接起来。那么在开启两个线程的前提下,请问要怎么做呢?求大神帮忙。线程通讯
你的连接是是异步的还是?
//申明
NetWorkStream netWorkStream;
BinaryReader br;
连接成功后:
netWorkStream=tcpClient.GetStream();
br=new BinaryReader (netWorkStream);
//在接收数据的地方:
byte [] b=new byte[20];//这里写死了,数据定为20个长度
b=br.ReadBytes(20);//读取数据
这里可以读取到数据,但是郁闷的是,要是数据不是20怎么办,后面的就都是0,明显不合理啊。也就是说我要怎么读取到每次数据的长度呢?
b不需要初始化,br.ReadBytes返回的数组长度就是实际读到的数据的长度
否则,你需要同步这两个线程。
它们虽然被先后准备开启,但是不保证按顺序开启。
可以把读取线程的start写在完成连接之后
或者读取操作前判断下连接的connected属性
b不需要初始化,br.ReadBytes返回的数组长度就是实际读到的数据的长度
然后再
threadReceive.Start();
你可以connect.Join();这样这个线程执行结束之后,才会执行后面的代码。但用两个线程的意义何在?
在你的Connect处理方法内部才调用 threadReceive.Start()。而不是提前调用。