网络编程之TCP与UDP
两者间的区别
1.TCP:基于安全的点对点传输协议
点对点:接收端、发送端,建立安全连接;
2.UDP:基于广播形式的传播,一对多非安全传输;
3.对两者的运用在以下代码中会以注解的形式呈现。
对IO流要熟悉掌握
1.字节流:(rander/writer);
2.字符流:(inputStream/outputStream);
3.以及他们的父类。
TCP(发送端)
public static void main(String[] args) {
try {
Socket socket = new Socket(“192.168.8.194”, 8989);
System.out.println(“已于服务端建立联系”);
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = socket.getOutputStream();
//这里不能够使用bufferedWriter
//如果使用,在运行过程中会报错,
//具体原因可看低层代码。(提示”换行符符“)
PrintWriter pw = new PrintWriter(os);
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
//inputStream不能被实例化
while(true){
System.out.println("向服务端发送消息:");
String msg = br1.readLine();
if(msg.equals("傻逼")){
break;
}
pw.println(msg);
pw.flush();
//读取消息
msg = br.readLine();
System.out.println("从服务端来的消息:"+msg);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TCP( 接收端)
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8989);
Socket socket = server.accept();
System.out.println("已于客户端建立联系");
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = socket.getOutputStream();
//这里不能够使用bufferedWriter
//如果使用,在运行过程中会报错,
//具体原因可看低层代码。(提示”换行符符“)
PrintWriter pw = new PrintWriter(os);
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
//inputStream不能被实例化
//发送消息
while(true) {
//接受的消息
String msg = br.readLine();
System.out.println("从客户端发来的消息:"+msg);
System.out.println("向客户端发送消息:");
msg = br1.readLine();
if(msg.equals("傻逼")){
break;
}
pw.println(msg);
pw.flush();
}
pw.close();
br1.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(8989);
Socket socket = server.accept();
System.out.println("已于客户端建立联系");
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
OutputStream os = socket.getOutputStream();
//这里不能够使用bufferedWriter
//如果使用,在运行过程中会报错,
//具体原因可看低层代码。(提示”换行符符“)
PrintWriter pw = new PrintWriter(os);
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
//inputStream不能被实例化
//发送消息
while(true) {
//接受的消息
String msg = br.readLine();
System.out.println("从客户端发来的消息:"+msg);
System.out.println("向客户端发送消息:");
msg = br1.readLine();
if(msg.equals("傻逼")){
break;
}
pw.println(msg);
pw.flush();
}
pw.close();
br1.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
UDP(发送端)
public class Sender {
public static void main(String[] args) {
try {
System.out.println(“发送端__”);
//准备数据
System.out.println(“请输入你要发送的数据”);
Scanner sc = new Scanner(System.in);
String msg = sc.nextLine();
//准备数据包
byte [] by = msg.getBytes();
//与接受端建立联系
InetAddress addr = InetAddress.getByName("228.7.6.7");
DatagramPacket dp = new DatagramPacket(by, by.length, addr, 8989);
//发送数据到接收端
// DatagramSocket ds = new DatagramSocket();
//使用地址蔟,发送数据报/包
MulticastSocket ms = new MulticastSocket();
ms.joinGroup(addr);
ms.send(dp);
System.out.println("数据发送成功");
ms.close();
//ds.send(dp);
//ds.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
UDP(接收端)
public static void main(String[] args) {
try {
//建立端口
System.out.println("_________接收端__________");
// DatagramSocket ds = new DatagramSocket(8989);
MulticastSocket ms = new MulticastSocket(8989);
InetAddress addr = InetAddress.getByName("228.7.6.7");
ms.joinGroup(addr);
//接受数据包
byte [] buff = new byte[1024];//创建数组作为接受数据包的容器
//在接收端接收数据包不需要IP地址
DatagramPacket dp = new DatagramPacket(buff, buff.length);
// ds.receive(dp);
//ds.close();
//使用地址簇接受数据包/报
ms.receive(dp);
ms.close();
//从数据包/报中读取接受到的数据
buff = dp.getData();
System.out.println("成功读取到长度为:"+"\t" + buff.length);
System.out.write(buff);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
UDP的总结
一、接收端;
1.准备数据
2.创建数据包/报(DatagramPacket)
3.发送(DatagramSocket)
或则([MulticastSocket] / joinGroup(inetAddress macastaddr))
二、
接收端:
1.接受 (MulticastSocket)
2.接收到数据报
3.从数据报中读取数据
TCP的总结
一、服务端 等待接受连接请求
ServerScoker server = new ServerSocket(port);
Socket socket = server.accepet();
二、发送连接请求
Socket socket = new Socket(“IP”,port);
UDP与TCP的大致思路就是这样了,共同学习。