Socket
1.使用socket 时,必须自己做数据的读取与解析
2.项目目录
3.服务端代码:
package com.test;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) throws Exception {
//启动socket服务端,,建议1万以上
ServerSocket serverSocket=new ServerSocket(12345);
System.out.println("服务端已启动");
DataOutputStream dataOutputStream=null;
DataInputStream dataInputStream=null;
while(true) {
try {
//监听客户端连接
//accept()是一个阻塞方法
Socket socket=serverSocket.accept();
System.out.println("客户端连接上,才会输出这里的内容");
//输入流,使用此流接收数据
dataInputStream=new DataInputStream(socket.getInputStream());
//得到输出流,使用此流发送数据
dataOutputStream=new DataOutputStream( socket.getOutputStream());
//城市名称
String city=dataInputStream.readUTF();
System.out.println("from client.."+city);
//查询天气
String result="晴";
//将天气查询结果发送给客户端
dataOutputStream.writeUTF(result);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
//资源释放
if (dataInputStream!=null) {
dataInputStream.close();
}
if (dataOutputStream!=null) {
dataOutputStream.close();
}
}
}
}
}
4.客户端代码
package com.test;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
/**
* socket客户端
* @author xjj13
*
*
*/
public class SocketClient {
public static void main(String[] args) throws Exception, Exception {
//创建socket连接
Socket socket=new Socket("127.0.0.1", 12345);
DataOutputStream dataOutputStream=null;
// DataInputStream 为包装类.为什么不用InputStream,因为接受数据时,用到字节数组,会造成乱码(一个汉子两个字节)
DataInputStream dataInputStream=null;
try {
//发送数据
//得到输出流
dataOutputStream=new DataOutputStream(socket.getOutputStream());
//发送一个城市名称
String city="北京";
dataOutputStream.writeUTF(city);
System.out.println("to server..."+city);
//接收数据
//得到输入流
dataInputStream=new DataInputStream(socket.getInputStream());
//接收服务端返回天气的查询结果
String result=dataInputStream.readUTF();
System.out.println("from server..."+result);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
if (socket!=null) {
socket.close();
}
if(dataInputStream!=null) {
dataInputStream.close();
}
if (dataOutputStream!=null) {
dataOutputStream.close();
}
}
}
}