看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着的ip地址,输出连接的地址,代码如下
public static void test1() {
try {
ServerSocket ss = new ServerSocket(8888);
Socket sk = ss.accept();
//获取连接的ip地址
System.out.println(sk.getInetAddress());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
可以通过电脑自带的命令提示符使用telnet命令连接测试,命令telnet加上ip加上端口号就可以连接了
上面通过使用ServerSocket返回一个Socket,然后我们通过查看Socket的api看到可以获取一个输入流,然后用Scanner包装,获取我们输入的内容,然后用while循环,然后在控制台输出内容
public static void test2() {
try {
System.out.println("服务已启动");
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println(s.getInetAddress());
InputStream is = s.getInputStream();
Scanner sc = new Scanner(is);
while (sc.hasNextLine()) {
String str = sc.nextLine();
System.out.println(str);
}
s.close();
is.close();
sc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然后还是跟上个方法一样,连接上服务端,输入telnet ip地址 端口然后回车
然后出现如下界面,我们输入的内容才能在命令提示符里显示出来
上面的代码方法使我们能在服务端发消息给客户端,而客户端不能发消息给服务端,下面介绍客户端能发消息给服务端,服务端不能发消息给客户端,我们new一个ServerSocket,然后监听8888端口,然后用Socket获取一个输出流(把我们在控制台写的内容输出到服务端),然后new一个scanner来包装System.in(获取键盘的输入流),然后把键盘的输入流输出到客户端
public static void test3() {
try {
System.out.println("服务启动");
ServerSocket ss = new ServerSocket(8888);
Socket socket = ss.accept();
PrintWriter pw = new PrintWriter(socket.getOutputStream());
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
pw.println(str);
pw.flush();
}
socket.close();
sc.close();
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在ServerSocket(服务端)里输入以下代码,既获取输入流又获取输出流,然后读取键盘输入的内容
public static void test1() {
try {
ServerSocket ss = new ServerSocket(8888);
while(true){
Socket socket = ss.accept();
Scanner scanner = new Scanner(socket.getInputStream());
PrintWriter pw = new PrintWriter(socket.getOutputStream());
while(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println(str);
Scanner s = new Scanner(System.in);
if (s.hasNextLine()) {
String msg = s.nextLine();
pw.println(msg);
pw.flush();
}
}
socket.close();
scanner.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然后在Socket(客户端)里输入以下代码,既获取输入流又获取输出流,然后获取键盘输入的内容
public static void test1(){
try {
Socket socket = new Socket("自己的ip地址xxx.xxx.xxx.xxx", 8888);
Scanner scanner = new Scanner(socket.getInputStream());
PrintWriter pw = new PrintWriter(socket.getOutputStream());
Scanner s = new Scanner(System.in);
while(s.hasNextLine()){
String str = s.nextLine();
if (str.equals("exit")) {
System.out.println("我要退出了");
socket.close();
s.close();
System.exit(0);
}
pw.println(str);
pw.flush();
String msg = scanner.nextLine();
System.out.println(msg);
}
s.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}