android作为服务器 pc做客户端 通信

Max7Chou 2012-11-09 03:28:40
客户端程序:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.Bundle;
import android.os.StrictMode;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.app.Activity;
import android.content.Intent;
import android.content.ReceiverCallNotAllowedException;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.NavUtils;

public class ChatRoom extends Activity {

private Button mLogin,mExit;
private EditText mName,mPwd;
private TextView mRegister;
private XmlUtil mXml;
private TypeUtil mTypeUtil;
private GetIp mIp;
private Socket mSocket;
private String message;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat_room);

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());

initialize();

}

private void initialize(){
mLogin =(Button)findViewById(R.id.login);
mExit =(Button)findViewById(R.id.exit);
mName =(EditText)findViewById(R.id.name);
mPwd =(EditText)findViewById(R.id.pwd);
mRegister =(TextView)findViewById(R.id.register);
mXml =new XmlUtil();
mTypeUtil =new TypeUtil();
mIp =new GetIp();

mLogin.setOnClickListener(mLoginListener);
mExit.setOnClickListener(mExitListener);
mRegister.setOnClickListener(mRegisterListener);
}

private View.OnClickListener mLoginListener=new View.OnClickListener() {

@Override
public void onClick(View v) {
connection();
String msg;
try {
msg = "abcdefg";
sendMessage(msg.replaceAll("\r\n|\n\r", ""));

BufferedReader reader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
s=reader.readLine();
if(s!=null) Log.e("ssss",s+"haode");
else Log.e("ssss","接受失败");

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};

private View.OnClickListener mExitListener=new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
};

private View.OnClickListener mRegisterListener=new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
};


private void connection(){
try {
mSocket =new Socket("192.168.33.66", 3342);
toastText("连接成功");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
toastText("连接失败"+e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
toastText("连接失败"+e.getMessage());
}
}

private void sendMessage(String msg){
try {
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream()));
writer.write(msg);
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

private void toastText(String msg){
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}

}

服务器端程序:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
static Socket socket;
public static void main(String args[]){

try {
ServerSocket ss=new ServerSocket(3342);
System.out.println("Connecting...");
while(true){
socket=ss.accept();
System.out.println("Connected");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(reader.readLine()+"haode");

PrintWriter writer=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
writer.write("wwwwwwwwwwwwwww");
writer.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
}
问题:运行程序时,服务器端只打印出
Connecting...
Connected
后面的语句System.out.println(reader.readLine()+"haode");没有打印出任何东西;
但是去掉红色字体部分就能够在服务器打印出接受到的来自客户端的信息,只是要点击两次按钮
求正解...
...全文
161 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Imgnation 2012-11-10
  • 打赏
  • 举报
回复
可以看看mina框架,方便多了
  • 打赏
  • 举报
回复
听你所述可知:BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));这句已经抛出异常。

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧