一、网络编程概述

客户端通过互联网和服务端连接起来 
二、网络编程三要素

三、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();
}
}
}
|