我写了一个主类是通过socket和C 程序通讯的.
在这个主类中,当连接建立后,我会开启一个线程,然后把socket传递过去,来循环执行握手操作...保持这个socket的长连接...
然后主线程执行下面的socket操作.....这个握手线程会每隔30秒执行一次....
现在的问题是,两个线程如果同时执行一个socket操作,比如,两个socket同时执行write操作..
就会出现问题.
如果用同步的方式,应该如何写?
代码如下:public class MainThread(){ private Socket socket;
DataOutputStream outData;
DataInputStream inData;
......
.....
public method1(...){
.....
.....
Hand2NC h = new Hand2NC(30000, "Hand NC", socket, outData, inData);
h.start();//启动握手线程
.....
.....
.....//执行其他socket操作
}}
public class Hand2NC extends Thread{
int pauseTime; //间隔时间 String name; //线程名称 Socket socket; DataOutputStream outData; DataInputStream inData;
....
//构造方法
Hand2NC(int x, String n, Socket s, DataOutputStream out, DataInputStream in) {
pauseTime = x;
name = n;
socket = s;
outData = out;
inData = in;
} public void run() {
while(true){
try{
//执行握手操作
....
}
catch(Exception ex){
outData.close();
inData.close();
socket.close();
}
}//end while
}//end run}
在这个主类中,当连接建立后,我会开启一个线程,然后把socket传递过去,来循环执行握手操作...保持这个socket的长连接...
然后主线程执行下面的socket操作.....这个握手线程会每隔30秒执行一次....
现在的问题是,两个线程如果同时执行一个socket操作,比如,两个socket同时执行write操作..
就会出现问题.
如果用同步的方式,应该如何写?
代码如下:public class MainThread(){ private Socket socket;
DataOutputStream outData;
DataInputStream inData;
......
.....
public method1(...){
.....
.....
Hand2NC h = new Hand2NC(30000, "Hand NC", socket, outData, inData);
h.start();//启动握手线程
.....
.....
.....//执行其他socket操作
}}
public class Hand2NC extends Thread{
int pauseTime; //间隔时间 String name; //线程名称 Socket socket; DataOutputStream outData; DataInputStream inData;
....
//构造方法
Hand2NC(int x, String n, Socket s, DataOutputStream out, DataInputStream in) {
pauseTime = x;
name = n;
socket = s;
outData = out;
inData = in;
} public void run() {
while(true){
try{
//执行握手操作
....
}
catch(Exception ex){
outData.close();
inData.close();
socket.close();
}
}//end while
}//end run}
……
}
为了保持长连接.必须进行socket握手操作........如果不开一个线程去执行握手操作的话,还有其他的方法可以解决这个问吗?有好的方法吗?
而是WEB方式的.....换句话说,用户在登陆网站之后的操作是请求--响应的方式...
只有在用户点了网页上的操作之后,才会触发后台主程序的socket操作...所以我才会想到单独开个线程来进行握手.....