客户端
首先需要连接指定ip地址和指定端口号的服务器,获取数据输入流和数据输出流
private synchronized void connect() {
try {
socket = new Socket(IP, port);
state = running;
dis = new DataInputStream(new BufferedInputStream(
socket.getInputStream()));
dos = new DataOutputStream(new BufferedOutputStream(
socket.getOutputStream()));
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(new BufferedInputStream(
socket.getInputStream()));
System.out.println("连接成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.i(TAG, "network connect 连接异常");
}
}
说明 DataOutputStream可以发送int String等类型的数据,ObjectOutputStream除了可以发送int String等类型的数据外,主要是发送object对象(对想要继承Serializable)
例如:
package com.sh.allobject;
import java.io.Serializable;
public class User implements Serializable{
public String userID;
public String userName;
public String userPhoneNum;
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPhoneNum() {
return userPhoneNum;
}
public void setUserPhoneNum(String userPhoneNum) {
this.userPhoneNum = userPhoneNum;
}
}
就可以通过ObjectOutputStream将整个已经赋值后的对象发送到服务器,同样服务器也应该定义相同的对象,并且所在包名必须与客户端相同,否则将不能接收到。服务器也可以发送对象到客户端,方法及要求类似。
发送数据方式
dos.writeInt(1);
dos.writeUTF("data");
dos.flush();
接收数据方式
int type = ois.readInt();
String data=ois.readUTF();
服务器端
首先接收客户端的连入
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();
接收数据和发送数据与上述相同。