socket传送自定义对象

来源:互联网 发布:软件测试第二版中文版 编辑:程序博客网 时间:2024/06/06 01:15

继续上回的socket。上回的socket传递的是一个基本类,这回传递的是一个自定义对象,自然是object,所以用到的流,也就是objectinputstream。废话不多说,直接上代码

===================================================================================================================================

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

import MyBean.User;

public class MySocket {
ServerSocket serverSocket=null;
int port=54543;
ObjectInputStream objectInputStream=null;
User user=null;
public MySocket() {
try {
    serverSocket=new ServerSocket(port);
    while(
            true
            ){
Socket socket=serverSocket.accept();
user=new User();
    objectInputStream=new ObjectInputStream(socket.getInputStream());
user=(User) objectInputStream.readObject();
System.out.println("收到了");
objectInputStream.close();
socket.close();
if (user==null) {
    System.out.println("空的,*");
}
System.out.println(user.getAge());
    }
} catch (Exception e) {
}
}
public static void main(String[] args) {
    new MySocket();
}
}

代码比较简单,里面的user是自己定义的。接下来是客户端的

=====================================================================================

package com.example.socketc8;

import android.support.v7.app.ActionBarActivity;

import java.io.BufferedWriter;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

import MyBean.User;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements Runnable{
Button button;
Socket socket;
User user=null;
ObjectOutputStream objectOutputStream=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    button=(Button) this.findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        
        @Override
        public void onClick(View v) {
            new Thread(MainActivity.this).start();
        }
    });
    }

    @Override
    public void run() {
try {
    user=new User("护士",20);
socket=new Socket("183.26.254.109",54543);
objectOutputStream=new ObjectOutputStream(socket.getOutputStream());
objectOutputStream.writeObject(user);
objectOutputStream.flush();
objectOutputStream.close();
socket.close();
}
 catch (Exception e) {
    // TODO: handle exception
}
    }

    
}

接下来将两点注意点

1.0.在使用时,user这个类(也就是我们的自定义对象类)必须是实现序列化。也就是implements serlizable

2.0在使用时,注意c.s两端必须把user这个来放在同一个包中,如package MyBean;,至于为什么,希望大神留言说下,谢谢,直接把bean的代码也上吧


package MyBean;

import java.io.Serializable;

public class User implements Serializable{
String name;
int age;
public User(String name,int age) {
this.name=name;
this.age=age;
}
public User() {
}
public void setAge(int age) {
    this.age = age;
}
public int getAge() {
    return age;
}
public void setName(String name) {
    this.name = name;
}
public String getName() {
    return name;
}
}
然后,希望你们那边c盘可以用来操作吧

0 0
原创粉丝点击