依旧萌新看哈,因为我也是萌新一只。
这里用一台电脑模拟的,要是想两台本地改ipv4。
一、传输信息
服务器端:
依旧是一个普普通通的java.class,上代码
public static void main(String[] args){
//socket.setKeepAlive(true);探测对方是否发生故障
try ( ServerSocket server=new ServerSocket(8080)){
System.out.println("正在等待客户链接...");
Socket socket = server.accept();
// socket.setSoTimeout(5000);//设置客户端响应时间不得超过5秒
System.out.println("客户端已链接,Tp地址为" + socket.getInetAddress().getHostAddress());
//数据传输
//收
System.out.println("读取客户端数据:");
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(reader.readLine());
//发
OutputStreamWriter writer=new OutputStreamWriter(socket.getOutputStream());
writer.write("收到\n");
writer.flush();
socket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这里模拟客户端向服务器端发信息,然后服务器返回信息。
客户端:
public static void main(String[] args) {
try (Socket socket=new Socket("localhost",8080); Scanner scanner=new Scanner(System.in)){
System.out.println("已连接到服务器");
OutputStreamWriter writer=new OutputStreamWriter(socket.getOutputStream());
writer.write(scanner.nextLine()+"\n");//没有换行符readeronlin读不了
writer.flush();
System.out.println("数据已发送,等待响应....");
BufferedReader reader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("收到服务器响应:"+reader.readLine());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("服务器链接失败");
e.printStackTrace();
}
}
}
启动服务器,再启客户端,在客户端输信息。
二、传文件
服务器
public class s3 {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(8080)) {
System.out.println("正在等待客户链接...");
Socket socket = server.accept();
System.out.println("客户端已链接,Tp地址为" + socket.getInetAddress().getHostAddress());
InputStream stream = socket.getInputStream();
FileOutputStream fileOutputStream=new FileOutputStream("data/test.txt");
byte[] bytes=new byte[1024];
int i;
while((i=stream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,i);
}
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在项目上新建一个文件夹,可以随意起名,我这里起的data,传过来的文件会存在这个文件夹的test.txt中。test可以自己改,后缀名一点要和你传的文件后缀名相同。不用自己去data文件夹里新建test.txt,它传过来就自动有了,
还有就是,不用删!!!每次自动更新成最新传的文件。。。
客户端
public static void main(String[] args) {
try (Socket socket=new Socket("localhost",8080)){
System.out.println("已连接到服务器");
FileInputStream fileInputStream=new FileInputStream("2.txt");
OutputStream stream=socket.getOutputStream();
byte[] bytes=new byte[1024];
int i;
while((i=fileInputStream.read(bytes))!=-1){//看有没有
stream.write(bytes,0,i);
}
fileInputStream.close();
stream.flush();
} catch (IOException e) {
System.out.println("服务器链接失败");
e.printStackTrace();
}
}
}
兄弟们,2.txt是咱客户端传给服务器端的文件,注意下路径问题。这里直接存在了大项目里,注意下就行,不注意会报错的哈。