111,120
社区成员
发帖
与我相关
我的任务
分享客户端
public class clientDemo07 {
public static void main(String[] args) throws IOException {
//TCP协议 需要经过三次握手 四次挥手
//客户端先给服务端发送请求 等待服务端响应
//服务端接收到以后 给客户端一个反馈 表示接收到了
//客户端再次向服务端发送连接请求 确认连接
//1.创建Socket类对象 带参构造方法 (String host,int port)
//创建流套接字并将其连接到指定主机上的指定端口号
Socket socket = new Socket("127.0.0.1", 10064);
//2.使用Socket类中的getOutputStream()方法 返回一个字节输出流对象 网络中的流
OutputStream os = socket.getOutputStream();
//普通字节流传输速度慢 创建字节缓冲流 进行转换
BufferedOutputStream bos = new BufferedOutputStream(os);
//3.创建字节缓冲输入流 进行读取本地的文件 本地中的流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\jdk1.8.rar"));
//4.声明一个变量
int variable;
//循环
while ((variable = bis.read()) != -1) {
//写数据
bos.write(variable);
}
//read()方法不仅具有读的功能 同时具有阻塞功能
//当客户端把数据传输到服务端以后 服务端并没有读完毕 因为没有给任何的标记
//所以 需要给服务端一个标记语句
//使用Socket类中的shutdownOutput()方法 暂时关闭输出流
//给服务器一个结束标记 告诉服务器文件已经传输完毕
socket.shutdownOutput();
//当客户端给服务端发送一个数据以后
//服务端会给客户端一个反馈
//表示确认收到数据
//创建字节输入流 进行接收
//使用Socket类中的getInputStream()方法 返回一个字节输入流
InputStream is = socket.getInputStream();
//如果服务端使用字符流进行传输数据 那么客户端接收到反馈以后就会报错 乱码
//字符+符号 那么读取就会报错
//所以需要使用字符流 进行接收
//但是Socket类中并没有返回字符流的方法 ?
//使用转换流进行转换
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//接收数据
//声明一个变量
String line;
//循环 接收数据
//因为String类是对象 并不是基本数据类型 所以默认值为null
while ((line = br.readLine()) != null) {
//输出
System.out.println(line);
}
//最后一步
//释放资源
//注意释放顺序
br.close();
bis.close();
os.close();
socket.close();
}
}
服务端
public class ServerDemo07 {
public static void main(String[] args) throws IOException {
//注意点:
//先运行服务端 再运行客户端
//1.创建ServerSocket类对象 带参构造方法 (int port)
//创建绑定到指定端口的服务器套接字
ServerSocket ss = new ServerSocket(10064);
//2.使用ServerSocket类中的accept()方法 监听客户端的数据并接受它 并且具有阻塞功能 返回一个socket类对象
Socket socket = ss.accept();
//3.客户端发送数据以后 需要接收
//使用Socket类中的getInputStream()方法 返回一个字节输入流对象
InputStream is = socket.getInputStream();
//普通字节流传输速度慢 使用字节缓冲流 网络中的流
BufferedInputStream bis = new BufferedInputStream(is);
//创建字节缓冲输出流 本地流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\jdk.rar"));
//读写数据
//声明一个变量
int variable;
//循环
while ((variable = bis.read()) != -1) {
//写数据
bos.write(variable);
}
//当接收到客户端发送的数据以后 还需要给客户端一个反馈
//创建字符缓冲输出流 转换流 OutputStreamWriter是字符流到字节流的桥梁
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//写数据
bw.write("数据上传成功 已经成功保存到本地");
//最后一步
//释放资源
//注意释放顺序
bw.close();
bos.close();
bis.close();
socket.close();
ss.close();
}
}
那就去java版块问吧,这里毕竟还是不对口