C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷,百度网盘。
B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等。
网络编程,就是在一定的协议下,实现两台计算机的通信的程序。
TCP/IP协议参考模型:内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
UDP:用户数据报协议(User Datagram Protocol)。
TCP:传输控制协议 (Transmission Control Protocol)。
三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
第三次握手,客户端再次向服务器端发送确认信息,确认连接。
四次挥手:TCP协议中,在发送数据结束后,释放连接时需要经过四次挥手。
public class Client2 {public static void main(String[] args) throws Exception {// 1、准备Socket,连接服务器,需要指定服务器的IP地址和端口号Socket socket = new Socket("127.0.0.1", 8888);// 2、获取输出流,用来发送数据给服务器OutputStream out = socket.getOutputStream();PrintStream ps = new PrintStream(out);// 3、获取输入流,用来接收服务器发送给该客户端的数据InputStream input = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(input));Scanner scanner = new Scanner(System.in);while(true){System.out.println("输入发送给服务器的单词或成语:");String message = scanner.nextLine();if(message.equals("stop")){socket.shutdownOutput();break;}// 4、 发送数据ps.println(message);// 接收数据String feedback = br.readLine();System.out.println("从服务器收到的反馈是:" + feedback);}//5、关闭socket,断开与服务器的连接scanner.close();socket.close();}
}public class Server2 {public static void main(String[] args) throws IOException {// 1、准备一个ServerSocketServerSocket server = new ServerSocket(8888);System.out.println("等待连接...");int count = 0;while(true){// 2、监听一个客户端的连接Socket socket = server.accept();System.out.println("第" + ++count + "个客户端"+socket.getInetAddress().getHostAddress()+"连接成功!!");ClientHandlerThread ct = new ClientHandlerThread(socket);ct.start();}//这里没有关闭server,永远监听}static class ClientHandlerThread extends Thread{private Socket socket;public ClientHandlerThread(Socket socket) {super();this.socket = socket;}public void run(){try{//(1)获取输入流,用来接收该客户端发送给服务器的数据BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//(2)获取输出流,用来发送数据给该客户端PrintStream ps = new PrintStream(socket.getOutputStream());String str;// (3)接收数据while ((str = br.readLine()) != null) {//(4)反转StringBuilder word = new StringBuilder(str);word.reverse();//(5)返回给客户端ps.println(word);}System.out.println(socket.getInetAddress().getHostAddress()+"正常退出");}catch(Exception e){System.out.println(socket.getInetAddress().getHostAddress()+"意外退出");}finally{try {//(6)断开连接socket.close();} catch (IOException e) {e.printStackTrace();}}}}
}
public class Send {public static void main(String[] args)throws Exception {
// 1、建立发送端的DatagramSocketDatagramSocket ds = new DatagramSocket();//要发送的数据ArrayList all = new ArrayList();all.add("好好学习!");all.add("天天向上!");all.add("每天进步一点点!");all.add("早日就业!");//接收方的IP地址InetAddress ip = InetAddress.getByName("127.0.0.1");//接收方的监听端口号int port = 9999;//发送多个数据报for (int i = 0; i < all.size(); i++) {
// 2、建立数据包DatagramPacketbyte[] data = all.get(i).getBytes();DatagramPacket dp = new DatagramPacket(data, data.length, ip, port);
// 3、调用Socket的发送方法ds.send(dp);}// 4、关闭Socketds.close();}
}public class Receive {public static void main(String[] args) throws Exception {
// 1、建立接收端的DatagramSocket,需要指定本端的监听端口号DatagramSocket ds = new DatagramSocket(9999);//一直监听数据while(true){// 2、建立数据包DatagramPacketbyte[] buffer = new byte[1024*64];DatagramPacket dp = new DatagramPacket(buffer , buffer.length);// 3、调用Socket的接收方法ds.receive(dp);//4、拆封数据String str = new String(buffer,0,dp.getLength());System.out.println(str);}}
}
上一篇:HACKTHEBOX——Help