TCP:是一种可靠的网络协议,再通信两端都建立一个Socket对象。
通信之前要保证连接已经建立。
通过Socket产生IO流进行通信。
创建对象时,会连接服务器,连接不上,会报错。
所以,先运行服务端,再运行发送端。
具体过程,注释写的很清楚了。
package demo1;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Client {
public static void main(String[] args) throws IOException {
// 创建连接通道
Socket socket = new Socket("127.0.0.1", 1000);
// 通过通道获取输出流
OutputStream os = socket.getOutputStream();
// 输出内容
os.write("你好阿".getBytes());
// 释放资源
os.close();
}
}
package demo1;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 创建对象接收
ServerSocket ss = new ServerSocket(1000);
// 获取连接的通道
Socket socket = ss.accept();
// 根据通道获得输入流
InputStream is = socket.getInputStream();
// 字节流 转换为 字符流,再包装成缓冲字符流,不出现乱码,并 提高效率
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 读入
String line;
while ((line = br.readLine()) != null) {
System.out.print(line);
}
// 释放资源
socket.close();
ss.close();
}
}
Client:
package demo3;
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException {
// 建立连接
Socket socket = new Socket("127.0.0.1", 1000);
// 创建缓冲输入字节流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("start/img.jpg"));
// 创建输出流
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
// 读入文件并传输
byte[] bytes = new byte[4096];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
// 写出结束标记
socket.shutdownOutput();
// 获取服务器回馈,读入,字节流转字符流,在转缓冲流
BufferedReader br= new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
line = br.readLine();
System.out.println(line);
// 释放资源
socket.close();
}
}
Server:
package demo3;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 创建对象
ServerSocket ss = new ServerSocket(1000);
// 接收连接
Socket socket = ss.accept();
// 读取数据,并保存到本地
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("target/b.jpg"));
byte[] bytes = new byte[4096];
int len;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
// 写回数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("上传成功");
bw.flush();
// 释放资源
socket.close();
ss.close();
}
}
运行结果:回馈和传输成功