想些一个聊天软件 pc端服务器和客户端都写好了,但是再写安卓端时老是会出现
W/System.err: java.net.SocketException: Socket is not connected
W/System.err: at java.net.Socket.getOutputStream(Socket.java:921)
W/System.err: at server.MyMessage.send(MyMessage.java:66)
W/System.err: at com.example.linqijun.qaclient.MainPageActivity$Destory.run(MainPageActivity.java:132)
W/System.err: at java.lang.Thread.run(Thread.java:761)
我是将注册页面的socket传到mainui上用的,结果会出这个问题,网上也查不到,第一次提问,不符合规矩的地方还请大大们原谅。
代码如下
public class LoginActivity extends AppCompatActivity {
private EditText accountEdit;
private EditText passwordEdit;
private Button loginB;
private Button registerB;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Toast.makeText(LoginActivity.this,msg.obj.toString(),Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_login);
accountEdit = (EditText) findViewById(R.id.account);
passwordEdit = (EditText) findViewById(R.id.password);
registerB = (Button) findViewById(R.id.register);
registerB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//启动注册
Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
startActivity(intent);
}
});
loginB = (Button) findViewById(R.id.login);
loginB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(accountEdit.getText().toString().equals("") || passwordEdit.getText().toString().equals("")){
Toast.makeText(LoginActivity.this,"can't be empty",Toast.LENGTH_SHORT).show();
return;
}
new Thread(new LoginThread()).start();
}
});
}
private class LoginThread implements Runnable{
private MySocket so;
@Override
public void run() {
try {
so = new MySocket("10.0.2.2",6870);
double id = Double.parseDouble(accountEdit.getText().toString());
String password = passwordEdit.getText().toString();
User temp = new User(id,"0");
temp.setPassWord(password);
MyMessage mgs = new MyMessage(temp);
mgs.setType(1);
mgs.send(so);
DataInputStream dis = new DataInputStream(so.getInputStream());
ObjectInputStream ois = new ObjectInputStream(dis);
MyMessage res = (MyMessage)ois.readObject();
if(res.getString().equals("success")){
//启动mainui activity
User toNext = res.getUser();
Intent intent = new Intent(LoginActivity.this,MainPageActivity.class);//"extre data",toNext,so);
Bundle bundle = new Bundle();
bundle.putSerializable("mgs",res);
bundle.putSerializable("so",so);
intent.putExtras(bundle);
startActivity(intent);
finish();
}else{
Message a = new Message();
a.obj = res.getString();
handler.sendMessage(a);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
然后是mainui的代码
public class MainPageActivity extends AppCompatActivity {
private MyMessage mgs;
private User u;
private MySocket so;
private ImageButton userHead ;
private TextView userName ;
private ListView friends;
private ArrayList<User> friendList ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main_page);
Intent intent = getIntent();
mgs = (MyMessage) intent.getSerializableExtra("mgs");
so = (MySocket) intent.getSerializableExtra("so");
u = mgs.getUser();
friendList = u.getFriends();
//名字
String nameTemp = u.getName() + " ( "+ ((Double)u.getID()).toString() + " )";
userName = (TextView) findViewById(R.id.main_userName);
userName.setText(nameTemp);
//头像
userHead = (ImageButton)findViewById(R.id.main_head_photo);
int photo = u.getPhotoType();
switch (photo){
case 0:
userHead.setImageResource(R.drawable.f0);
break;
case 1:
userHead.setImageResource(R.drawable.f1);
break;
case 2:
userHead.setImageResource(R.drawable.f2);
break;
case 3:
userHead.setImageResource(R.drawable.f3);
break;
case 4:
userHead.setImageResource(R.drawable.f4);
break;
case 5:
userHead.setImageResource(R.drawable.f5);
break;
case 6:
userHead.setImageResource(R.drawable.f6);
break;
case 7:
userHead.setImageResource(R.drawable.f7);
break;
case 8:
userHead.setImageResource(R.drawable.f8);
break;
case 9:
userHead.setImageResource(R.drawable.f9);
break;
case 10:
userHead.setImageResource(R.drawable.f10);
break;
case 11:
userHead.setImageResource(R.drawable.f11);
break;
}
//好友列表
FriendAdapter adapter = new FriendAdapter(MainPageActivity.this,R.layout.friend_list,friendList);
friends = (ListView)findViewById(R.id.main_friendList);
friends.setAdapter(adapter);
friends.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
User inTalk = friendList.get(position);
}
});
}
@Override
protected void onDestroy() {
new Thread ( new Destory()).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
super.onDestroy();
}
private class Destory implements Runnable{
@Override
public void run() {
MyMessage exitmsg = new MyMessage(u);
exitmsg.setType(2);
exitmsg.send(so);
}
}
}