一、网络编程概述
客户端通过互联网和服务端连接起来
二、网络编程三要素
三、IP地址
四、InetAddress的使用
1.getByName方法
2.getHostAdress方法
五、端口
六、协议
七、UDP通信程序
1.UDP通信原理
2.UDP发送数据
发送数据包需要一个数据包类型的对象,我们创建数据包类需要导包
UDP发送端程序代码演示: 代码优化:
3.UDP接收数据
用DatagramSocket类中的带参构造方法 接收数据时创建数据包用DatagramPacket类中的这个方法 解析数据包:
4.UDP练习
八、TCP通信程序
1.TCP通信原理
2.TCP发送数据
第一步创建Socket对象: Socket的构造方法: 用这个构造方法个更加方便
第二步获取输出流:
用这个方法 代码演示:
3.TCP接收数据
第一步创建服务器端的Socket对象: 使用的构造方法:
在SeverSocket类中有一个方法可以得到一个Socket类型的对象,用来监听客户端的连接,一旦连接就立刻生成一个Socket对象 然后通过Socket对象获取输入流
代码演示:
4.TCP通信程序练习
1.练习一
2.练习二
3.练习三
4.练习四
5.练习五
我们启动程序之后发现没有反馈内容,就卡在这里不继续执行
我们在客户端的这个部位输出2222:
我们在服务端的这个部位输出1111
发现1111没有执行到,而2222执行到了 说明根本就没有执行到这里,反馈也没给出去
而客户端走到这里已经准备读数据,但是读不到反馈,所以就卡在这里了
原因分析: 服务端在这里读数据
客户端在这里写数据:
接着客户端在这里读数据:
虽然客户端读完数据就已经写完了,但是服务器并不知道客户端什么时候写完数据
所以服务器一直在等待读取数据:
而客户端以为服务端做完了,他也在等待读取数据 可以用这两个方法来解决
6.练习六
代码演示: ClientDemo类:
package com.itheima_10;
import java.io.*;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket s = new Socket("192.168.1.66",10000);
BufferedReader br = new BufferedReader(new FileReader("myNet\\InetAddressDemo.java"));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line;
while ((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
s.shutdownOutput();
BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
String data = brClient.readLine();
System.out.println("服务器的反馈:" + data);
br.close();
s.close();
}
}
ServerDemo 类:
package com.itheima_10;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10000);
while (true) {
Socket s = ss.accept();
new Thread(new ServerThread(s)).start();
}
}
}
ServerThread类:
package com.itheima_10;
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
int count = 0;
File file = new File("myNet\\Copy["+count+"].java");
while (file.exists()) {
count++;
file = new File("myNet\\Copy["+count+"].java");
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
String line;
while ((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bwServer.write("文件上传成功");
bwServer.newLine();
bwServer.flush();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|