概念
tcp协议传输数据比较稳定,开始传输数据前,客户端会有服务端进行三次握手,客户端向服务端发送数据包,服务端向客户端回复数据包,客户端再向服务端回复数据包,以此确保服务端可以接收数据,之后才开始传输数据。而udp协议是发送端直接向接收端传递数据,没有服务端,并且发送端只管发送,不管接收端是否可以接收。
tcp实例
客户端
package com.test.tcpTest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//tcp客户端
//1.创建客户端 指定服务器端的ip和端口号
try {
Socket socket=new Socket("192.168.8.4", 8899);
//返回客户端的字节输出流对象
OutputStream os= socket.getOutputStream();
//2.发送数据到服务器端
os.write("tcp你好".getBytes());
//也可以接收服务端的反馈信息
InputStream is= socket.getInputStream();
byte[] data=new byte[1024];
is.read(data);
System.out.println("得到服务器反馈回来的消息:"+new String(data));
//3.关闭客户端
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务端
package com.test.tcpTest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//服务器端
try {
//1.创建服务器端socket
ServerSocket serverSocket=new ServerSocket(8899);
//2.接收客户端
Socket socket= serverSocket.accept();
//3.拿到客户端的消息
InputStream is= socket.getInputStream();
byte[] data=new byte[1024];
is.read(data);
System.out.println("来自客户端的消息:"+new String(data));
//4.给客户端发送反馈信息
OutputStream os= socket.getOutputStream();
os.write("你好,收到你的消息了".getBytes());
//4.关闭客户端
socket.close();
//5.关闭服务器端
//serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}