1.TCP(Transmission Control Protocol)传输控制协议,是面向链接的,可靠的,有序的,基于字节流的传输层通信协议。
2.UDP(User Datagram Protocol)用户数据报协议,是面向无连接的,不可靠的,无序的,面向报文的传输层通信协议。
Java中基于TCP提供的两个重要的类是服务端的ServerSocket和客户端的socket。基于UDP提供的连个类是DatagramPacket和DatagramSocket。具体代码如下:
TCP客户端:
try {
Socket sc = new Socket("192.168.1.114",8650);
OutputStream os = sc.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("用户名:admin;密码:123456");
System.out.println("哈哈");
pw.flush();
sc.shutdownOutput();
InputStream is = sc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
while(str!=null){
System.out.println("我是客户端:服务器说:"+str);
str = br.readLine();
}
is.close();
br.close();
os.close();
pw.close();
sc.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TCP服务端:
try {
ServerSocket ss = new ServerSocket(8650);
//调用accept方法
System.out.println("****服务器即将启动,等待链接****");
Socket so = ss.accept();
//通过输入输入量获取信息
InputStream is = so.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String info = br.readLine();
while(info!=null){
System.out.println("服务端:"+info);
info = br.readLine();
}
so.shutdownInput();
OutputStream os = so.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎");
pw.flush();
pw.close();
os.close();
is.close();
isr.close();
br.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
UDP客户端:
InetAddress ia = InetAddress.getByName("localhost");
int port=8650;
byte[] data = "用户名:啊哈,密码:123456".getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length,ia,port);
DatagramSocket ds = new DatagramSocket();
ds.send(dp);
byte[] data2 = new byte[1024];
DatagramPacket dp2 = new DatagramPacket(data2, data2.length);
ds.receive(dp2);
String info = new String(data2, 0, dp2.getLength());
System.out.println("客户端:服务器说:"+info);
ds.close();
UDP服务端:
DatagramSocket ds = new DatagramSocket(8650);
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
System.out.println("********服务器端已经启动,等待链接********");
ds.receive(dp);
String info = new String(data, 0, dp.getLength());
System.out.println("服务器端:客户说:"+info);
InetAddress ia = dp.getAddress();
int port = dp.getPort();
System.out.println(port);
byte[] data2 = "欢迎你".getBytes();
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, ia,port);
ds.send(packet2);
ds.close();