Socket 客户端 IO技术
ServerSocket 服务端 IO技术
可以使用转换流
TCP客户端建立
1 建立TCP服务
2 因为是面向连接 就必须有连接才能进行通讯
在创建客户端时,就必须明确目的地址和端口
3 一但连接建立 就有了传输数据的通道 就可以通道中进行数据传输
这个传输其实就是通过流实现的 需要io流
4关闭资源
public class TCP_test1 {
public static void main(String[] args) throws IOException {
// 创建客户端对象 明确服务端地址和端口
System.out.println("TCP客户端1启动");
Socket s=new Socket("192.168.1.6",10003);
// 获取socket流中的输出流 将数据发送到服务端
OutputStream os=s.getOutputStream();
// 通过输出流写数据
os.write("TCP客户端1正在传输".getBytes());
// 接收来自服务端的数据
InputStream is=s.getInputStream();
byte[] bufin=new byte[1024];
int len=is.read(bufin);
String s1=new String(bufin,0,len);
System.out.println(s1);
// 关闭资源
s.close();
}
}
TCP服务端建立
public class TCP_test1server {
public static void main(String[] args) throws IOException {
// 创建socket服务端服务
System.out.println("TCP服务端1已启动");
// 明确接收端端口
ServerSocket ss=new ServerSocket(10003);
// 获取客户端
Socket s= ss.accept();
// 调用客户端方法
String ip= s.getInetAddress().getHostAddress();
System.out.println(ip+"已接入");
// 通过客户端对象获取socket流的读取流
InputStream is=s.getInputStream();
byte[] bufin=new byte[1024];
int len=is.read(bufin);
String s1=new String(bufin,0,len);
System.out.println(s1);
OutputStream os=s.getOutputStream();
// 通过输出流写数据
os.write("TCP服务端1进行反馈".getBytes());
s.close();
ss.close();
}
}
TCP客户端向服务端上传文本
IO流读取文本
再调用socket方法进行上传
public class TCP_test2 {
public static void main(String[] args) throws IOException {
System.out.println("TCP客户端2已启动");
// 创建客户端服务 明确服务端地址 和 端口
Socket s=new Socket("192.168.1.6",10004);
// 源文件 文本
File file=new File("D:\\IO\\TEST.txt");
BufferedReader bufr=new BufferedReader(new FileReader(file));
// 通过socket客户端调用输出流
// BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
// 一定要自动刷新 否则资源还在本地
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
// 频繁读写
String line=null;
while ((line=bufr.readLine())!=null){
out.println(line);}
s.shutdownOutput();
// 接收来自服务端的数据
InputStream is=s.getInputStream();
byte[] bufin=new byte[1024];
int len=is.read(bufin);
String s1=new String(bufin,0,len);
System.out.println(s1);
bufr.close();
s.close();
}
}
TCP服务端接收文本
调用socket方法进行接收
IO流将文本写入本地
public class TCP_test2server {
public static void main(String[] args) throws IOException {
System.out.println("TCP2服务端已启动");
// 创建TCP2服务端
ServerSocket ss=new ServerSocket(10004);
// 接收套接字
Socket s= ss.accept();
// 获取IP
String ip=s.getInetAddress().getHostAddress();
// 源 来自网络
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
// 目的文本
BufferedWriter bw= new BufferedWriter(new FileWriter("D:\\IO\\net.server\\"+ip+" TEST.txt"));
// 频繁读写
String line=null;
while ((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
}
OutputStream os=s.getOutputStream();
// 通过输出流写数据
os.write("TCP客户端2上传成功".getBytes());
bw.close();
s.close();
ss.close();
}
}
并发上传图片
客户端
public class TCP_test3 {
public static void main(String[] args) throws IOException {
System.out.println("TCP客户端3已启动");
Socket s=new Socket("192.168.1.6",10005);
BufferedInputStream bi=new BufferedInputStream(new FileInputStream("D:\\IO\\test.png"));
OutputStream os=s.getOutputStream();
byte[] bytes=new byte[1024];
int len=0;
while ( (len=bi.read(bytes))!=-1)
{
os.write(bytes,0,len);
}
// 发送完后 给服务端终止指令
s.shutdownOutput();
InputStream is=s.getInputStream();
byte[] bufin=new byte[1024];
int len1=is.read(bufin);
String s1=new String(bufin,0,len1);
System.out.println(s1);
bi.close();
s.close();
}
}
服务端
public class TCP_test3server {
public static void main(String[] args) throws IOException {
System.out.println("TCP服务端3已启动");
ServerSocket ss=new ServerSocket(10005);
//每次读取都需要重新接收一个新的客户端 并重新使用输入流
while (true) {
Socket s=ss.accept();//阻塞等待客户端
// 将来访的客户端都封装到一个单独的线程中
new Thread(new TCP_test3Runnable(s)).start();
}
//ss.close();
}
}
public class TCP_test3Runnable implements Runnable {
private Socket s;
public TCP_test3Runnable(Socket s) {
this.s = s;
}
@Override
public void run() {
String ip=s.getInetAddress().getHostAddress();
BufferedInputStream bi= null;
try {
bi = new BufferedInputStream(s.getInputStream());
int count = 1;
File file = new File("D:\\IO\\net.server\\" + ip + " (" + count + ")test.png");
while (file.exists()) {
count++;
file=new File("D:\\IO\\net.server\\" + ip + " (" + count + ")test.png");
}
System.out.println(file);
BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(file));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bi.read(bytes)) != -1)
bo.write(bytes, 0, len);
OutputStream os = s.getOutputStream();
// 通过输出流写数据
os.write("TCP客户端3上传成功".getBytes());
bo.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}