网络编程基础知识
01、两种软件架构(核心由javaweb阶段介绍)
A、BS架构
a.含义
B:Browser浏览器
S:Server服务器
b.举例
淘宝网站、京东商城、百度搜索、CSDN论坛、网页小游戏
c.特点
直接使用浏览器,访问网站,就可以进去
B、CS架构
a.含义
C:Client客户端
S:Server服务器
b.举例
QQ软件、迅雷软件、酷狗音乐、LOL游戏
c.特点
需要下载客户端,安装客户端,才能使用
02、网络编程三要素
A、IP地址 (ipv4和ipv6)
a.查看IP地址的指令 ipconfig
b.本地默认IP地址 127.0.0.1
B、端口号
a. 端口号 范围是 0~65535
b. 其中 0~1024 属于系统端口,不要使用
C、通信协议
a.TCP协议
传输数据大
安全性高
速度慢
b.UDP协议
传输数据小 64KB
安全性低
速度快
TCP通信流程
01、客户端(发送数据)操作步骤
A.创建Socket的对象 // Socket clickSocket = new Socket(\"IP地址\",端口号);
B.获取IO流对象(输出) // OutputStream os = clickSocket.getOutputStream();
C.写数据 // os.write(\"需要写入的数据\"); //可以进行流的增强
D.释放资源 // os.close();
02、服务端(接收数据)操作步骤
A.创建ServerScoket对象 // ServerSocket serverSocket = new ServerSocket(端口号);
B.连接客户端Socket对象 // Socket clientSocket = serverSocket.accept();
C.获取IO流对象(输入) // InputStream is = clickSocket.getInputStream();
D.读数据 // int ch = is.read(); //可以进行流的增强
E.释放资源 // is.close();
03、服务端(回复数据)操作步骤
A.获取IO流对象(输出) // OutputStream os = clientSocket.getOutputStream();
B.写数据 // os.write(\"需要写回的数据\"); //可以进行增强流
C.释放资源 // os.close();
D.关闭客户端socket // clickSocket.close();
04、客户端(接收数据)操作步骤
A.获取IO流对象(输入) // InputStream is = clickSocket.getInputStream();
B.读数据 // int ch = is.read(); //可以进行流的增强
C.释放资源 // is.close();
D.关闭客户端socket // clickSocket.close();
05、注意事项
A.采用 BufferedReader 和 BufferedWriter 进行读写操作.
BufferedWriter 每次写完一个数据,需要换行和刷新.才能被 BufferedReader 读取得到
原因是: BufferedReader 采用 readLine()读取数据的结束条件是 \"遇到换行符结束\"
B.客户端的 Socket 和 服务端获取客户端Socket要匹配上
客户端的 Socket ----- 匹配到 ---> 服务端的 serverSocket.accept();
C.常见问题
a.IP地址如果写错
处于一种等待的状态. 最终出现 连接超时的情况 Connection timed out: connect
b.端口号如果写错
直接拒绝访问. 出现 java.net.ConnectException: Connection refused: connect
c.服务器重复运行两次及以上
端口号已经被占用了,不能重复使用 java.net.BindException: Address already in use: NET_Bind
案例
简单交互
//客户端代码
package code.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class client {
public static void main(String[] args)throws IOException {
Socket clientSocket=new Socket(\"192.168.34.57\", 777);
OutputStream os = clientSocket.getOutputStream();
os.write(\"你好,服务器\".getBytes());
os.flush();
InputStream is = clientSocket.getInputStream();
int len;
byte[] a=new byte[1024];
len=is.read(a);
System.out.println(new String(a,0,len));
clientSocket.close();
}
}
//服务器代码
package code.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args)throws IOException {
ServerSocket serverSocket = new ServerSocket(969);
Socket client = serverSocket.accept();
InputStream is = client.getInputStream();
byte[] a=new byte[1024];
int len;
len=is.read(a);
System.out.println(new String(a,0,len));
OutputStream os = client.getOutputStream();
os.write(\"收到谢谢\".getBytes());
os.flush();
client.close();
}
}
文件上传
//服务器多线程提高效率,且重命名避免文件被覆盖
//客户端代码
package code.shangchuan.youhua;
import java.io.*;
import java.net.Socket;
public class clientsocket {
public static void main(String[] args)throws IOException {
FileInputStream fis=new FileInputStream(\"f:\\\\音乐\\\\残酷月光.mp3\");
Socket client=new Socket(\"192.168.34.92\",985);
OutputStream os = client.getOutputStream();
int len;
byte[] b=new byte[1024];
while ((len=fis.read(b))!=-1){
os.write(b,0,len);
}
client.shutdownOutput();
BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
String line;
while((line=br.readLine())!=null){
System.out.println(line);
}
fis.close();
client.close();
}
}
//服务器代码
package code.shangchuan.youhua;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)throws IOException {
ServerSocket ser=new ServerSocket(985);
while (true) {
Socket client = ser.accept();
new Thread(()->{
try {
upLoadFilm(client);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
private static void upLoadFilm(Socket client) throws IOException {
String path=\"f:\\\\\"+System.currentTimeMillis()+\".mp3\";
FileOutputStream fos=new FileOutputStream(path);
InputStream is = client.getInputStream();
int len;
byte[] b=new byte[1024];
while((len=is.read(b))!=-1){
fos.write(b,0,len);
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
bw.write(\"上传完毕,请查收\");
bw.newLine();
bw.flush();
fos.close();
client.close();
}
}
继续阅读与本文标签相同的文章
下一篇 :
AD 域验证
-
Python高级进阶#011 pyqt5按钮QPushButton应用
2026-05-18栏目: 教程
-
Apache Solr Velocity模版注入远程命令执行漏洞复线
2026-05-18栏目: 教程
-
从订货会的功能变迁看出版业的沧海桑田
2026-05-18栏目: 教程
-
ASP.NET Core on K8S深入学习(9)Secret & Configmap
2026-05-18栏目: 教程
-
【深度知识】Kafka原理入门和详解
2026-05-18栏目: 教程
