想做一个关于socket编程的测试,android作为客户端,java程序作为服务器,服务器执行的时候在:BufferedReader br = new BufferedReader(new inputStreamReader(socket.getInputString())); String line = br.readline();这一句时老是执行不通过,请问各位是什么原因?
客户端代码: public class VisitTerminalActivity extends Activity implements OnClickListener{ /** Called when the activity is first created. */ private ImageButton visitCallButton; private Button ViewMenuButton; //call center terminal socket connect private Socket callSocket; private ServerSocket callServerSocket; private static final int PORT = 8181; private static final String ip="192.168.1.102"; private BufferedReader callBR; private PrintWriter callPW; private StringBuffer callSB; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); //getWindow().setBackgroundDrawableResource(R.drawable.unlock_delayed_time); super.onCreate(savedInstanceState); setContentView(R.layout.main); visitCallButton = (ImageButton)findViewById(R.id.visit_call_button); visitCallButton.setOnClickListener(this); ViewMenuButton = (Button)findViewById(R.id.view_menu_btn); ViewMenuButton.setOnClickListener(this); }
@Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.visit_call_button: new Thread(new CallCenterTerminalThread()).start(); gotoCallCenter(); break; case R.id.view_menu_btn: gotoMainMenu(); break; }
public class VisitTerminalActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
private ImageButton visitCallButton;
private Button ViewMenuButton;
//call center terminal socket connect
private Socket callSocket;
private ServerSocket callServerSocket;
private static final int PORT = 8181;
private static final String ip="192.168.1.102";
private BufferedReader callBR;
private PrintWriter callPW;
private StringBuffer callSB;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
//getWindow().setBackgroundDrawableResource(R.drawable.unlock_delayed_time);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
visitCallButton = (ImageButton)findViewById(R.id.visit_call_button);
visitCallButton.setOnClickListener(this);
ViewMenuButton = (Button)findViewById(R.id.view_menu_btn);
ViewMenuButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.visit_call_button:
new Thread(new CallCenterTerminalThread()).start();
gotoCallCenter();
break;
case R.id.view_menu_btn:
gotoMainMenu();
break;
}
}
private void gotoCallCenter(){
Intent skipIntent = new Intent();
skipIntent.setClass(this, CallWithCenterTerminal.class);
startActivity(skipIntent);
}
private void gotoMainMenu(){
Intent intentMain = new Intent();
intentMain.setClass(this, VisitTerminalMainMenu.class);
startActivity(intentMain);
}
class CallCenterTerminalThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
//建立连接
try {
callSocket = new Socket(ip,PORT);
callServerSocket = new ServerSocket(PORT);
callBR = new BufferedReader(new InputStreamReader(callSocket.getInputStream()));
callPW = new PrintWriter(callSocket.getOutputStream());
System.out.println("c"+callSocket.isConnected());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
//发送消息
if(callSocket.isConnected()){
callPW.print("call");
System.out.println("connect");
}
callSB = new StringBuffer();
String readLine = null;
try {
while((readLine=callBR.readLine())!=null){
callSB.append(readLine);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
callSocket.close();
callServerSocket.close();
callPW.close();
callBR.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
private void initSocket(){
try {
callSocket = new Socket(ip,PORT);
callServerSocket = new ServerSocket(PORT);
callBR = new BufferedReader(new InputStreamReader(callSocket.getInputStream()));
callPW = new PrintWriter(callSocket.getOutputStream());
System.out.println("c"+callSocket.isConnected());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}服务器代码:
package com.serversocket.receiver;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class ServerSocketTest {
private static ServerSocket sSocket;
private static Socket clientSocket;
private static BufferedReader serverBR;
private static PrintWriter serverPW;
private static StringBuffer sb;
public static void main(String[] args) {
try {
sSocket = new ServerSocket(8181);
System.out.println("serverSocket is:"+sSocket.getLocalPort());
clientSocket = sSocket.accept();
if(clientSocket.isConnected()){
System.out.println("server connect");
}
serverBR = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
serverPW = new PrintWriter(clientSocket.getOutputStream());
new ReceiverThread().start();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
static class ReceiverThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("run");
String line = null;
sb = new StringBuffer();
try {
System.out.println("read:"+serverBR.readLine());
} catch (Exception e) {
// TODO: handle exception
}
try {
while((line= serverBR.readLine())!=null){
sb.append(line);
}
String content = sb.toString();
System.out.println("content:"+content);
System.out.println(content);
serverPW.println("server");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
sSocket.close();
clientSocket.close();
serverPW.close();
serverBR.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
if(isStringBuffer("call")){
System.out.println("receiver");
}
super.run();
}
}
private static boolean isStringBuffer(String content){
if(sb.toString().equals(content)){
return true;
}
return false;
}
}
客户端有出错信息:01-02 00:57:33.199: WARN/System.err(2551): java.net.SocketException: Connection reset by peer
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
01-02 00:57:33.199: WARN/System.err(2551): at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458)
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
01-02 00:57:33.199: WARN/System.err(2551): at java.io.InputStreamReader.read(InputStreamReader.java:255)
01-02 00:57:33.199: WARN/System.err(2551): at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
01-02 00:57:33.209: WARN/System.err(2551): at java.io.BufferedReader.readLine(BufferedReader.java:357)
01-02 00:57:33.209: WARN/System.err(2551): at com.matchsystem.visit.main.VisitTerminalActivity$CallCenterTerminalThread.run(VisitTerminalActivity.java:92)
01-02 00:57:33.209: WARN/System.err(2551): at java.lang.Thread.run(Thread.java:1019)服务器输出信息是:serverSocket is:8181
server connect
run
按理说server connect 这一句打印信息已经输出,应该是连接已经建立起来了,为什么我在服务器收不到信息?
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method)
01-02 00:57:33.199: WARN/System.err(2551): at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273)
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458)
01-02 00:57:33.199: WARN/System.err(2551): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
01-02 00:57:33.199: WARN/System.err(2551): at java.io.InputStreamReader.read(InputStreamReader.java:255)
01-02 00:57:33.199: WARN/System.err(2551): at java.io.BufferedReader.fillBuf(BufferedReader.java:128)
01-02 00:57:33.209: WARN/System.err(2551): at java.io.BufferedReader.readLine(BufferedReader.java:357)
01-02 00:57:33.209: WARN/System.err(2551): at com.matchsystem.visit.main.VisitTerminalActivity$CallCenterTerminalThread.run(VisitTerminalActivity.java:92)
01-02 00:57:33.209: WARN/System.err(2551): at java.lang.Thread.run(Thread.java:1019)不知道是什么原因造成的?