Socket需要自己手动组装数据
服务端是先接收数据,后发送数据
客户端是先发送数据,后接收数据
服务端
package socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @todo 服务端
* @author zhaov
* @date 2016年9月26日 下午10:00:01
*/
public class SocketServer {
@SuppressWarnings("resource")
public static void main(String[] args) {
// 启动socket
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(12345);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // 端口
System.out.println("Server is running...");
DataInputStream dis = null;
DataOutputStream dos = null;
while (true) { // 服务端一直在运行
try {
// 监听客户端连接
// accept是阻塞方法
Socket socket = serverSocket.accept();
// 输入流,使用此流接收数据
// 使用包装类的输入输出流可以防止出现乱码问题
dis = new DataInputStream(socket.getInputStream());
// 输出流,使用此流接收数据
dos = new DataOutputStream(socket.getOutputStream());
// 接收城市名称
String cityName = dis.readUTF();
System.out.println("Data from client--->." + cityName);
// 查询天气
String result = "晴";
// 将结果返回给客户端
dos.writeUTF(result);
System.out.println("Return to Client--->" + result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (dis != null) {
dis.close();
}
if (dos != null) {
dos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
客户端
package socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
public static void main(String[] args) {
Socket socket = null;
DataOutputStream dos = null;
DataInputStream dis = null;
try {
socket = new Socket("127.0.0.1", 12345);
// 得到输出流
dos = new DataOutputStream(socket.getOutputStream());
// 得到输入流
dis = new DataInputStream(socket.getInputStream());
// 发送数据
// 发送城市名称
String cityName = "北京";
dos.writeUTF(cityName);
System.out.println("Send to server--->" + cityName);
// 接收数据
String result = dis.readUTF();
System.out.println("Data from sever--->" + result);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// Socket是由客户端发起的,所以也应该由客户端关闭。
if (socket != null) {
socket.close();
}
if (dis != null) {
dis.close();
}
if (dos != null) {
dos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}