Socket定义:
套接字(Socket)是一个抽象层,应用程序可以通过它发送或接受数据,可对其进行像文件一样的打开,读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址和端口的组合。可以理解为两台机器或进程间进行网络通信的端点,这个端点包括IP地址和端口号。
Socket和ServerSocket的区别就像其名字一样,简单的说ServerSocket作用在服务端,用以监听客户端的请求。Socket作用在客户端和服务端,用以发送和接受消息。就像上边所说的,它们都哟啊包含一个Ip地址和端口号
IO
简单说一下IO,IO常见的应用场景就是网络通信和读取文件等方面。IO分为字节流和字符流。字节既Byte,包含八位二进制数,一个二进制数就是1bit,中文名叫位。字符既一个字母或者一个汉字,一个字母由一个字节组成。而汉字根据编码的不同由2个或者3个组成。Java.io包如下
实战
1.首先创建两个类 Server和Client
Server.class
package com.yjn.learn;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Author yjn
* @Date 2021/10/12 2:02 下午
*/
public class Server {
public static void main(String[] args) {
//定义默认的监听端口
final int DEFAULT_PORT=8888;
try {
//创建ServerSocket监听8888端口
ServerSocket serverSocket=new ServerSocket(DEFAULT_PORT);
System.out.println("Server Socket Start... The Prot is "+DEFAULT_PORT);
while (true){
//一直监听改端口号
//阻塞式监听,如果没有客户端请求就一直停留在这里
Socket socket = serverSocket.accept();
System.out.println("Client["+socket.getInetAddress()+"] Online");
//接受消息
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送消息
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String msg;
while ((msg=reader.readLine())!=null){
System.out.println("Client ["+socket.getInetAddress()+msg);
//服务端要发送的消息
writer.write("Server"+msg+"\n");
writer.flush();
if("quit".equals(msg)){
System.out.println("Client ["+socket.getInetAddress()+"Offline");
break;
}
}
}
}catch (IOException e){
e.printStackTrace();
}
}
}
Client.class
package com.yjn.learn;
import java.io.*;
import java.net.Socket;
/**
* @Author yjn
* @Date 2021/10/12 2:03 下午
*/
public class Client {
//客服端程序
public static void main(String[] args) {
//定义ip和端口号
final String DEFAULT_SERVER_HOST = "127.0.0.1";
final int DEFAULT_SERVER_PORT = 8888;
try {
//创建socket
Socket socket = new Socket(DEFAULT_SERVER_HOST, DEFAULT_SERVER_PORT);
//接受消息 从socket里获取一个连接
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//发送消息
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//获取用户输入的消息
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String msg;
//循环输入
while (true) {
String inputMessage = input.readLine();
writer.write(inputMessage + "\n");
writer.flush();
msg = reader.readLine();
System.out.println(msg);
if ("quit".equals(inputMessage)){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.然后运行两个类 打开终端