
文章目录
- [TCP通信练习1 --- 多发多收](#TCP通信练习1 --- 多发多收)
- [TCP通信练习2 --- 接收和反馈](#TCP通信练习2 --- 接收和反馈)
- [TCP通信练习3 --- 上传文件(结合io流)🐦🔥](#TCP通信练习3 --- 上传文件(结合io流)🐦🔥)
- [TCP通信练习5 --- 上传文件(多线程版)🐦🔥👏🤔](#TCP通信练习5 --- 上传文件(多线程版)🐦🔥👏🤔)
- [TCP通信练习7 --- BS架构模型(接受浏览器的消息并打印)](#TCP通信练习7 --- BS架构模型(接受浏览器的消息并打印))
TCP通信练习1 --- 多发多收

java
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class E1_TCP_Client {
public static void main(String []args) throws IOException {
Socket socket = new Socket("127.0.0.1",10086);
OutputStream os = socket.getOutputStream();
Scanner sc = new Scanner(System.in);
while(true) {
String str = sc.nextLine();
os.write(str.getBytes());
if("886".equals(str))
break;
}
os.close();
socket.close();
}
}
===========================================================
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class E1_TCP_Server {
public static void main(String []args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket sk = ss.accept();
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int c;
while((c=isr.read())!=-1) {
System.out.print((char)c);
}
System.out.println();
sk.close();
ss.close();
}
}
TCP通信练习2 --- 接收和反馈

java
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class E2_TCP_Client {
// 客户端:发送一条数据,接收服务端反馈的消息并打印
// 服务器:接收数据并打印,再给客户端反馈消息
public static void main(String[] args) throws IOException {
// 1.创建Socket对象并连接服务器
Socket sk = new Socket("127.0.0.1", 10086);
// 2.写出数据
OutputStream sr = sk.getOutputStream();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
sr.write(str.getBytes());
// 写一个结束标记
sk.shutdownOutput();
// 3.接收服务端回写的数据
InputStreamReader isr = new InputStreamReader(sk.getInputStream()) ;
int num ;
while((num = isr.read())!=-1){
System.out.print((char)num);
}
sr.close();
sk.close();
}
}
===============================================================
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class E2_TCP_Server {
public static void main(String[] args) throws IOException {
// 客户端:发送一条数据,接收服务端反馈的消息并打印
// 服务器:接收数据并打印,再给客户端反馈消息
// 1.创建对象并绑定10086端口
ServerSocket ss = new ServerSocket(10086);
// 2.等待客户端连接
Socket sk = ss.accept();
// 3.从Socket中获取输入流读取数据
InputStreamReader isr = new InputStreamReader(sk.getInputStream());
int num ;
// 注意:read方法会从连接通道中读取数据,但是需要有一个结束标记才能让循环停止
while((num = isr.read())!=-1){
System.out.print((char)num);
}
// 4.回写数据
String str = "我不想聊了,好烦,滚";
OutputStream os = sk.getOutputStream();
os.write(str.getBytes());
isr.close();
ss.close();
}
}
TCP通信练习3 --- 上传文件(结合io流)🐦🔥

java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class E3_TCP_Client {
public static void main(String []args) throws IOException {
// 客户端:将本地文件上传到服务器,后接收服务器的反馈
// 服务器:接收客户端上传的文件,上传完毕后给出反馈
// 1.创建Socket对象,连接服务器
Socket sk = new Socket("127.0.0.1",10086);
// 2.读取本地文件中的数据,并写到服务器中
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("网络编程\\ClientDir\\Photo.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(sk.getOutputStream());
byte []bytes = new byte[1024];
int len;
while((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
// 往服务端写出结束标记
sk.shutdownOutput();
// 3.接收服务端的回写数据
BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
String line = br.readLine();
System.out.println(line);
// 4.释放资源
sk.close();
}
}
===========================================================
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class E3_TCP_Server {
public static void main(String[] args) throws IOException {
// 客户端:将本地文件上传到服务器,后接收服务器的反馈
// 服务器:接收客户端上传的文件,上传完毕后给出反馈
// 1.创建对象并绑定端口
ServerSocket ss = new ServerSocket(10086);
// 2.等待客户端连接
Socket sk = ss.accept();
// 读取数据并存入本地文件夹中
BufferedInputStream bis = new BufferedInputStream(sk.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("网络编程\\ServerDir\\Photo.jpg"));
int len;
byte []bytes = new byte[1024];
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes,0,len);
}
// 4.回写数据 字节流转换成字符流再用缓冲流包裹
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
bw.write("上传成功");
bw.newLine();
bw.flush();
// 5.关闭资源
sk.close();
ss.close();
}
}
TCP通信练习5 --- 上传文件(多线程版)🐦🔥👏🤔

java
import java.io.*;
import java.net.Socket;
public class E5_TCP_Client {
public static void main(String []args) throws IOException {
// 可以实现多用户上传数据【多线程】
// 客户端:将本地文件上传到服务器,后接收服务器的反馈
// 服务器:接收客户端上传的文件,上传完毕后给出反馈
// 1.创建Socket对象,连接服务器
Socket sk = new Socket("127.0.0.1",10086);
// 2.读取本地文件中的数据,并写到服务器中
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("网络编程\\ClientDir\\Photo.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(sk.getOutputStream());
byte []bytes = new byte[1024];
int len;
while((len = bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
// 往服务端写出结束标记
sk.shutdownOutput();
// 3.接收服务端的回写数据
BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
String line = br.readLine();
System.out.println(line);
// 4.释放资源
sk.close();
}
}
======================================================
import java.io.*;
import java.net.Socket;
import java.util.UUID;
public class E5_TCP_MyRunnable implements Runnable{
Socket sk;
public E5_TCP_MyRunnable(Socket sk){
this.sk = sk;
}
public void run() {
try {
// 读取数据并存入本地文件夹中
BufferedInputStream bis = new BufferedInputStream(sk.getInputStream());
// 产生随机名称的函数 (去掉随机数中的横杠"-")
String name = UUID.randomUUID().toString().replace("-","");
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("网络编程\\ServerDir\\"+name+".jpg"));
int len;
byte[] bytes = new byte[1024];
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
// 4.回写数据 字节流转换成字符流再用缓冲流包裹
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
bw.write("上传成功");
bw.newLine();
bw.flush();
}catch(Exception e){
e.printStackTrace();
}finally {
// 5.关闭资源
if(sk != null) {
try {
sk.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
===========================================================
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;
public class E5_TCP_Server {
public static void main(String[] args) throws IOException {
// 可以实现多用户上传数据【多线程】
// 客户端:将本地文件上传到服务器,后接收服务器的反馈
// 服务器:接收客户端上传的文件,上传完毕后给出反馈
// 创建线程池对象
ThreadPoolExecutor pool = new ThreadPoolExecutor(
3, // 核心线程数量
16, // 线程池总大小
60, // 空闲时间
TimeUnit.SECONDS, // 单位时间(单位)
new ArrayBlockingQueue<>(2), // 阻塞队列
Executors.defaultThreadFactory(), // 线程工厂
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
// 1.创建对象并绑定端口
ServerSocket ss = new ServerSocket(10086);
while(true) {
// 2.等待客户端连接
Socket sk = ss.accept();
// 每有一个用户就开启一个线程
// 普通创建线程
//new Thread(new E5_TCP_MyRunnable(sk)).start();
// 使用线程池
pool.submit(new E5_TCP_MyRunnable(sk));
}
}
}
运行结果:
TCP通信练习7 --- BS架构模型(接受浏览器的消息并打印)

代码跟练习1的Server代码一样,只是客户端变为了浏览器,在浏览器里面输入127.0.0.1:对应的端口号
即可实现
java
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class E1_TCP_Server {
public static void main(String []args) throws IOException {
ServerSocket ss = new ServerSocket(10086);
Socket sk = ss.accept();
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int c;
while((c=isr.read())!=-1) {
System.out.print((char)c);
}
System.out.println();
sk.close();
ss.close();
}
}
运行结果:
如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!
