1、常用的网络协议Tcp/ip协议簇
TCP协议
1、常见的模式
B/S模式 浏览器/服务器模式
C/S模式 客户端/服务器模式
2、TCP网络连接时的三次握手
- 客户端申请连接服务器
- 服务器同意客户端连接
-
3、断开时的四次挥手
客户端向服务器发送断开连接请求
- 服务器收到后回应客户端
- 服务器再向客户端发送断开请求
-
4、Java实现TCP连接上传文件
/*
客户端
*/
public class tcpsent(){
public static void main(String[] args){
try {
InetAddress ip = InetAddress.getByName("localhost");
int port = 9999;
Socket s= new Socket(ip, port);
OutputStream os =s.getOutputStream();
byte[] buffer =new byte[1024];
int len;
FileInputStream filein =new FileInputStream(new File("img\\mayi.jpg"));
while((len=filein.read(buffer))!=-1) {
os.write(buffer,0,buffer.length);
}
filein.close();
os.close();
s.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
}
}
```java //服务端 public class tcpreceive {
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket(9999);
Socket socket = s.accept();
InputStream os = socket.getInputStream();
FileOutputStream fileout = new FileOutputStream(new File("C:\\Users\\TR\\Pictures\\Camera Roll\\mayi.jpg"));
byte[] buffer = new byte[1024];
int len;
while((len=os.read(buffer))!=-1) {
fileout.write(buffer,0,len);
}
System.out.println("ok");
fileout.close();
os.close();
s.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
<a name="JurEj"></a>
#### 5、java实现tcp通信的几个类
```java
//服务器
ServerSocket(int port);//服务器对象
Socket ServerSocket.accept();阻塞等待客户端连接请求,获取一个Socket对象
//客户端
Socket(ip,port);//客户端对象
Socket.getInputStream //获取输入流,一般用于服务器接收客户端传来的数据流
Socket.getOutputStream //获取输出流,一般用于客户端向服务器发送数据流
//文件上传涉及的io对象
FileOutputStream(new File(path)) //文件输出流,用于将文件写入磁盘
FileInputStream(new File(path)) //文件输入流,用于读入指定路径的文件
//通用方法
close() //关闭流(连接)
UDP协议
1、UDP实现数据包发送到指定端口
//发送端
public static void main(String[] args) {
try {
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in));
String data = bufferedreader.readLine();
System.out.println(data);
byte[] buffer = data.getBytes();
DatagramPacket p =new DatagramPacket(buffer,0,buffer.length,InetAddress.getByName("localhost"),6666);
DatagramSocket s =new DatagramSocket(9999);
s.send(p);
s.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//接收端
public static void main(String[] args) {
//6666端口
try {
DatagramSocket s =new DatagramSocket(6666);
byte[] buf =new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,0,buf.length);
s.receive(packet);
String msg =new String(packet.getData(),0,packet.getLength());
System.out.println(msg);
s.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、java实现udp通信的几个类
//数据发射台
DatagramSocket(port) //用来接收和发送数据包的‘发射台’,端口号为port
.receive(DatagramPacket) //用来将接收包裹
.sent(DatagramPacket) //用来发送包裹
.close() //关闭连接
//数据包裹
DatagramPacket(buf,0,buf.length,ip,port) //用来传输数据的包裹,可以被DatagramSocket对象发送到目标地址端口
.getData() //获取包裹里传递的数据
//除此之外,还可以获取发送端的端口号和ip