网络编程
网络编程知识
一、目的
建立两台机器进行通话
二、模式
cs模式
客户端 服务器
bs模式
浏览器 服务器
三、ISO/OSI七层参考模型
ISO:international standard organization(国际标准组织,不单单只针对于计算机领域)
OSI:开放式系统互联参考模型 理论上的模型
下层为上层提供服务
上层使用下层提供服务
对等层之间不进行交互
**四、TCP/IP模型 **
使用到生产环境
tcp协议 :是一种面向连接的、保证可靠传输的协议。
发文件
** tcp三次握手**
主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,请求建立连接。通过这个数据段,主机A告诉主机B两件事:我想要和你通信、你可以用哪个序列号作为其实数据段来回应我。
主机B收到主机A的请求后,用户一个带有确认应答(ACK) 和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经接收到你的请求了,你可以传输数据了;你可以用哪个序列号作为起始数据段来回应我
-
主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B的数据段:我已收到回复。
四次挥手
udp协议:是一种无连接的协议,不可靠的传输协议,每个数据报都是一个独立的信息。
视频 音频会议
java网络编程
一、URLConnection
下载百度
public class TestUrlConnection {
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.baidu.com");
URLConnection connection = url.openConnection();
System.out.println(connection);
//从服务器下载内容
InputStream in = connection.getInputStream();
//写出内容
OutputStream out = new FileOutputStream("e:/baidu.html");
int hasRead = 0;
byte[] buffer = new byte[1024];
while((hasRead = in.read(buffer)) != -1) {
out.write(buffer, 0, hasRead);
out.flush();
}
out.close();
in.close();
System.out.println("ok");
}
}
二、客户端与服务端交互
**public** **class** TestMyServer {
**public** **static** **void**main(String[] args) **throws** Exception {
//创建服务端
ServerSocket <u>server</u>= **new** ServerSocket(9999);
**while**(**true**) {
Socket socket= server.accept();//阻塞方法
System.***out***.println("连上了");
//System.out.println(socket.getInetAddress().getHostAddress());
OutputStream out= socket.getOutputStream();
String message= "欢迎连接";
out.write(message.getBytes());
//读取客户端的消息
InputStream in= socket.getInputStream();
**int** hasRead = 0;
**byte**[] buffer= **new** **byte**[1024];
**while** ((hasRead= in.read(buffer)) != -1) {
System.***out***.println("收到消息"+**new** String(buffer,0,hasRead));
}
}
}
}
逐行读取
//读取客户端的消息
BufferedReader reader= **new** BufferedReader(**new** InputStreamReader(socket.getInputStream()));
**while** (**true**) {
String str= reader.readLine();
System.***out***.println(str);
}
### **客户端与服务器的对话 (读写分离)**
/**
* 主线程负责读
* **@author** <u>pc</u>
*
*/
**public** **class** MyServer {
**public** **static** **void**main(String[] args) **throws** Exception {
ServerSocket <u>server</u>= **new** ServerSocket(9999);
Socket socket= server.accept();//阻塞方法 有客户端连接才能往下执行
//子线程负责写
SocketThread thread= **new** SocketThread(socket);
thread.start();
//服务器负责读
BufferedReader reader= **new** BufferedReader(**new** InputStreamReader(socket.getInputStream()));
**while**(**true**) {
System.***out***.println("客户端:"+ reader.readLine());
}
}
}
/**
* 开一个子线程负责写
* **@author** <u>pc</u>
*
*/
**public** **class** SocketThread **extends** Thread{
**private**Socket socket;
PrintWriter print;
**public**SocketThread(Socket socket) {
**this**.socket= socket;
init();
}
**private** **void** init() {
**try** {
print= **new** PrintWriter(socket.getOutputStream());
} **catch**(IOException e) {
// **TODO** Auto-generated catch block
e.printStackTrace();
}
}
@Override
**public** **void** run() {
Scanner <u>sc</u>= **new** Scanner(System.***in***);
**while** (**true**) {
String message= sc.nextLine();
print.println("服务器:"+ message);
print.flush();
}
}
}