现在一直在弄,TCP服务器 客户端的程序,但是总是无法实现自由发送,就是可以接受并显示数据,但是发送数据却没有办法实现;若可以实现发送数据,那么就无法实现接收数据,额 好纠结。
1.我想利用线程Thread来实现,在Thread里面进行接收数据,但是我如何进行发送数据呢?我在Thread里面:
Socket socket = new Socket(HOST, PORT);
这样一来我知道可以在里面进行收发数据,但是必须是接收到数据后,同时进行返回的时候才可以发送数据。当服务器没有数据过来时候,我如何主动发送数据呢?
开始我是想在Thread外调用Thread里面的 socket但是我不知道如何调用?(也不知道是否可以)
2.我利用两个Thread一个发送,一个用来接收,但是如果我在 接收数据的Thread里面进行了:Socket socket = new Socket(HOST, PORT);那么我在 发送数据的Thread里面有如何调用这个socket呢?
我开始笨笨的直接在发送数据线程里面也用Socket socket = new Socket(HOST, PORT);我发现此时虽然可以发送数据,但是每次发送数据的端口是不一样的,我发送一次数据端口就变一次额······
求高人指点!!!!!!
下面是我发送,接收的两个程序:
////发送 按钮响应
send_btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
new Thread()
{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
Socket socket = new Socket(HOST, PORT);
//获得输出流
PrintWriter os = new PrintWriter(socket.getOutputStream());
os.println("afafafadf");
os.flush();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
});
set_btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
showDialog(0);
}
});
stop_btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(tcpclient.this,MainActivity.class);
startActivity(i);
finish();
}
});
setTitle("Socket to " + HOST + ":" + PORT);
////////接收线程
connect_btn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
connect_btn.setEnabled(false);
set_btn.setEnabled(false);
stop_btn.setEnabled(true);
send_btn.setEnabled(true);
new Thread()
{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
// TODO Auto-generated catch block
Socket socket = new Socket(HOST, PORT);
//获得输入流
InputStream inputStream=socket.getInputStream();
//获得输出流
OutputStream outputStream = socket.getOutputStream();
//PrintWriter os = new PrintWriter(socket.getOutputStream())
int temp = 0;
String s;
byte []byteBuffer = new byte[1024];
while((temp=inputStream.read(byteBuffer))!=-1)
{
outputStream.write(byteBuffer,0,temp);//原样返回 收到的数据
s = new String(byteBuffer,0,temp);//将byte转为string
}
outputStream.flush();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
});
------解决方案--------------------
这是java基础了
Socket是长连接的,不用每次都构造连接一次
还有啊,上面边个SocketServer都没有,你发都哪,从哪收啊
------解决方案--------------------
1. 进入程序 就开始连接socket 不用每次都连接,连接一次就可以, 接收 用线程 发送不用