
标题图
第84节:Java中的网络编程(中)
实现客户端和服务端的通信:
客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流,然后进行读取服务端发送回来的大写数据,为socket读取流,最后进行客户端显示器的显示,进行读写操作,关闭资源。
网络编程TCP客户端
package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TransClient { public static void main(String[] args) throws IOException { // 客户端
// 创建socket 明确地址和端口
Socket s = new Socket("192.168.1.151",10005);
// 键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
// 网络, socket输出流// OutputStream out = s.getOutputStream();
// 传的是字符数据, 转换,提高效率// BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
// 打印流,既能接收字符又能接收字节
PrintWriter out = new PrintWriter(s.getOutputStream());
// 读取流,读取服务端发来的数据// InputStream in = s.getInputStream();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 显示数据,使用输出语句
// 频繁读写,读键盘
String line = null; while((line=bufr.readLine()) != null) { if("over".equals(line)) { break;
} // 读取键盘的数据发送到服务端
out.println(line);
// 读取服务端返回的数据
String upperText = bufIn.readLine();
System.out.println(upperText);
}
// 关闭资源
s.close();
}
}对于服务端,要创建一个服务端的socket,然后明确端口,要读取客户端发送过来的数据,要读取socket输入流,接着使用socket输出流,将数据发送给客户端,进行读写操作,关闭资源。
网络编程TCP服务端
package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TransServer { public static void main(String[] args) throws IOException {
System.out.println("服务端运行。。。"); // 服务端:
// 创建服务端的socket,明确端口
ServerSocket ss = new ServerSocket(10005); while (true) { // 获取客户端对象
Socket s = ss.accept();
// 打印ip地址
System.out.println(s.getInetAddress().getHostAddress()+"...connected"); // socket输入流,读取客户端发过来的数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); // socket输出流,将数据发送给客户端// PrintWriter out = new PrintWriter(s.getOutputStream());
PrintWriter out = new PrintWriter(s.getOutputStream(), true); // 频繁的读写操作
String line = null; while ((line = bufIn.readLine()) != null) { // 如果客户端发送过来的是over
if ("over".equals(line)) { break;
}
// 客户端的数据
System.out.println(line); // 字母转大写
out.println(line.toUpperCase()); // 都在缓冲区中,刷新// out.flush();
} // 关闭客户端
s.close();
}
}
}package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TransClient { public static void main(String[] args) throws IOException {
System.out.println("客户端运行。。。"); // 客户端
// 创建socket 明确地址和端口
Socket s = new Socket("192.168.2.151",10005);
// 键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
// 网络, socket输出流// OutputStream out = s.getOutputStream();
// 传的是字符数据, 转换,提高效率// BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
// 打印流,既能接收字符又能接收字节// PrintWriter out = new PrintWriter(s.getOutputStream());
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
// 读取流,读取服务端发来的数据// InputStream in = s.getInputStream();
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
// 显示数据,使用输出语句
// 频繁读写,读键盘
String line = null; // 都一行,有行终止符才返回
while((line=bufr.readLine()) != null) { // 读取键盘的数据发送到服务端// out.print(line+"\r\n");
out.println(line); // 刷数据,都在缓冲区中// out.flush();
if("over".equals(line)) { break;
}
// 读取服务端返回的数据
String upperText = bufIn.readLine();
System.out.println(upperText);
}
// 关闭资源
s.close();
}
}上传文件
void shutdownInput() 此套接字的输入流置于“流的末尾”void shutdownOutput() 禁用此套接字的输出流String toString() 将此套接字转换为String.
客户端:
package com.dashucoding.net.uploadtext;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class UploadTextClient { public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("上传文件客户端运行。。。"); // 客户端
// 创建socket 明确地址和端口
Socket s = new Socket("192.168.43.126", 10006); // 读取文本文件
BufferedReader bufr = new BufferedReader(new FileReader("tempfile\\client.txt")); // 将数据发送给服务端
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
// 显示数据,使用输出语句
// 频繁读写,读键盘
String line = null; // 都一行,有行终止符才返回true
while ((line = bufr.readLine()) != null) {
out.println(line);
}
// 给服务端发送一个结束标记,条约标记// out.println("over");
s.shutdownOutput(); // 向服务端发送了结束标记
// 读取流,读取服务端发来的数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String info = bufIn.readLine();
System.out.println(info); // 关闭资源
bufr.close();
s.close();
}
}服务端:
package com.dashucoding.net.uploadtext;import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class UploadTextServer { public static void main(String[] args) throws IOException {
System.out.println("上传文本服务端运行。。。"); // 服务端:
// 创建服务端的socket,明确端口
ServerSocket ss = new ServerSocket(10006); while (true) { // 获取客户端对象
Socket s = ss.accept();
System.out.println(s.getInetAddress().getHostAddress() + "...connected"); // socket输入流,读取客户端发过来的数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(
s.getInputStream())); // socket输出流,目的是文件
PrintWriter pw = new PrintWriter(new FileWriter("tempfile\\server.txt"), true); // 频繁的读写操作
String line = null; while ((line = bufIn.readLine()) != null) { if("over".equals(line)) { break;
}
pw.println(line);
}
// 发回给客户端,上传成功
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("上传成功");
// 关闭客户端
s.close();
}
}
}上传图片
客户端:
package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class UploadPicClient { public static void main(String[] args) throws IOException {
System.out.println("上传图片客户端运行。。。"); // 上传图片
// 创建socket
Socket s = new Socket("192.168.43.126",10007);
// 读取图片,图片路径
File picFile = new File("tempfile\\001.jpg");
FileInputStream fis = new FileInputStream(picFile);
// socket 输出流
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024]; int len = 0; while((len=fis.read(buf)) != -1) {
out.write(buf,0,len);
}
// 告诉服务器端图片数据发送完毕,不要等着读了。
s.shutdownOutput();
// 读取上传成功
InputStream in = s.getInputStream(); byte[] bufIn = new byte[1024]; int lenIn = in.read(bufIn);
System.out.println(new String(bufIn, 0, lenIn));
// 关闭
fis.close();
s.close();
}
}服务端:
package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import org.omg.CORBA_2_3.portable.OutputStream;public class UploadPicServer { public static void main(String[] args) throws IOException {
System.out.println("上传图片服务端运行。。。"); // 创建serversocket
ServerSocket ss = new ServerSocket(10007); while (true) { // 实现上传多回
// 获取客户端
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected"); // 读取图片数据
InputStream in = s.getInputStream(); // 写图片数据到文件
File picFile = new File("tempfile\\server.jpg"); // 存储图片
FileOutputStream fos = new FileOutputStream(picFile); byte[] buf = new byte[1024]; int len = 0; while ((len = in.read(buf)) != -1) {
fos.write(buf, 0, len);
} // 给客户端返回一个回馈信息
java.io.OutputStream out = s.getOutputStream();
out.write("上传成功".getBytes()); // 关闭资源
fos.close();
s.close();
}
}
}如何解决图片重名的问题:
package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class UploadPicClient { public static void main(String[] args) throws IOException {
System.out.println("上传图片客户端运行。。。"); // 上传图片
// 创建socket
Socket s = new Socket("192.168",10007);
// 读取图片,图片路径
File picFile = new File("tempfile\\001.jpg");
FileInputStream fis = new FileInputStream(picFile);
// socket 输出流
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024]; int len = 0; while((len=fis.read(buf)) != -1) {
out.write(buf,0,len);
}
// 告诉服务器端图片数据发送完毕,不要等着读了。
s.shutdownOutput();
// 读取上传成功
InputStream in = s.getInputStream(); byte[] bufIn = new byte[1024]; int lenIn = in.read(bufIn);
System.out.println(new String(bufIn, 0, lenIn));
// 关闭
fis.close();
s.close();
}
}package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import org.omg.CORBA_2_3.portable.OutputStream;public class UploadPicServer { public static void main(String[] args) throws IOException {
System.out.println("上传图片服务端运行。。。"); // 创建serversocket
ServerSocket ss = new ServerSocket(10007); while (true) { // 实现上传多回
// 获取客户端
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected"); // 读取图片数据
InputStream in = s.getInputStream(); // 写图片数据到文件
// 创建目录
File dir = new File("e:\\uploadpic"); // 如果不存在就创建目录
if(!dir.exists()) {
dir.mkdir();
} // 给文件编号
// 加计数器
int count = 1; // 防止第二次为0
File picFile = new File(dir, ip + "("+count+").jpg");// if(picFile.exists()) {
while(picFile.exists()) {
count++;
picFile = new File(dir, ip + "("+count+").jpg");
}
FileOutputStream fos = new FileOutputStream(picFile);
// File picFile = new File("tempfile\\" + ip + ".jpg");// File picFile = new File("tempfile\\server.jpg");
// 存储图片
byte[] buf = new byte[1024]; int len = 0; while ((len = in.read(buf)) != -1) {
fos.write(buf, 0, len);
} // 给客户端返回一个回馈信息
java.io.OutputStream out = s.getOutputStream();
out.write("上传成功".getBytes()); // 关闭资源
fos.close();
s.close();
}
}
}
作者:达叔小生
链接:https://www.jianshu.com/p/58ddf1e28823
随时随地看视频