netstat指令:
1.netstat -an可以查看当前主机网络情况,包括端口监听情况和网络链接情况
2.netstat -an | more 可以分页显示
3.要求在dos控制台下执行
应用案例1:
1.编写一个服务端,和一个客户端
2.服务器端在8888端口监听
3.客户端连接到服务端,发送一张图片d:\\test1.png
4.服务器端接收到客户端发送的图片,保存到src下,发送"收到图片"再退出
5.客户端接收到服务端发送的"收到图片",再退出
java
package com.javaWeb.Socket;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketTCP04server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端在8888端口监听,等待连接.....");
Socket socket = serverSocket.accept();
System.out.println("服务器端socket=" + socket.getClass());
try {
// 1. 接收图片文件
InputStream inputStream = socket.getInputStream();
// 保存到项目src目录下
String projectDir = System.getProperty("user.dir");
String savePath = projectDir + "\\src\\received.png";
try (BufferedOutputStream bufferedOutputStream =
new BufferedOutputStream(new FileOutputStream(savePath))) {
byte[] buffer = new byte[1024];
int readLen;
while ((readLen = inputStream.read(buffer)) != -1) {
bufferedOutputStream.write(buffer, 0, readLen);
}
}
System.out.println("图片保存完成: " + savePath);
// 2. 发送响应消息
OutputStream outputStream = socket.getOutputStream();
String response = "收到图片";
outputStream.write(response.getBytes("UTF-8"));
outputStream.flush();
System.out.println("服务器退出");
} finally {
socket.close();
serverSocket.close();
}
}
}
java
package com.javaWeb.Socket;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class SocketTCP04cilent {
public static void main(String[] args) throws Exception{
Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
System.out.println("客户端socket返回=" + socket.getClass());
//2.连接上后,生成Socket,通过socket.getOutputStream()
OutputStream outputStream = socket.getOutputStream();//会返回一个outputStream
String filePath = "d:\\test1.PNG";
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(filePath));
byte c[] = new byte[1024];
int readLen = 0;
while((readLen = bufferedInputStream.read(c)) != -1) {
outputStream.write(c, 0, readLen);
}
InputStream inputStream = socket.getInputStream();
byte c2[] = new byte[1024];
int readLen1 = 0;
while((readLen1 = inputStream.read(c2)) != -1) {
inputStream.read(c2, 0, readLen);
}
inputStream.close();
outputStream.close();
bufferedInputStream.close();
socket.close();
}
}
应用案例2:
服务端逻辑:
-
等待客户端连接。
-
读取客户端发送的第一行数据,如果是"name",则回复"我是.....",否则打印"你说啥呢"。
-
然后读取客户端发送的第二行数据,如果是"hobby",则回复"编写java程序",否则打印"你说啥呢"。
-
客户端逻辑:
-
连接服务端。
-
发送"name",然后接收服务端的回复,应该是"我是.......",否则打印"你说啥呢"。
-
发送"hobby",然后接收服务端的回复,应该是"编写java程序",否则打印"你说啥呢"。
java
package com.javaWeb.Homework;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
public class Homework01client {
public static void main(String[] args) throws IOException {
//1.链接服务端(ip,端口)
//链接InetAddress.getLocalHost()(本机)的9999端口,如果链接成功,会返回一个socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 3366);//InetAddress.getLocalHost()这里可以改为要链接对象的IP地址
System.out.println("客户端socket返回=" + socket.getClass());
OutputStream outputStream = socket.getOutputStream();
//通过输出流,写入数据到数据通道,使用字符流
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("name");
bufferedWriter.newLine();//插入一个换行符,表示写入的内容结束,要求对方使用readLine方式读取
bufferedWriter.flush();//如果使用字符流,需要手动刷新
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
if(!(s.equals("我是刘任"))){
System.out.println("你说啥呢");
}
System.out.println(s);
bufferedWriter.write("hobby");
bufferedWriter.newLine();
bufferedWriter.flush();
String s1 = bufferedReader.readLine();
if(!(s1.equals("编写java程序"))){
System.out.println("你说啥呢");
}
System.out.println(s1);
bufferedReader.close();
bufferedWriter.close();
outputStream.close();
inputStream.close();
socket.close();
}
}
java
package com.javaWeb.Homework;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Homework01server {
public static void main(String[] args) throws IOException {
byte c[] = new byte[1024];
ServerSocket serverSocket = new ServerSocket(3366); //代表在本机的9999端口监听
System.out.println("服务端在3366端口监听,等待链接....."); //此时端口已被占用,无法被其他程序使用
//2.当没有客户端链接9999端口时,程序会阻塞,等待连接
//如果有客户端链接,则会返回一个socket对象,程序继续执行
Socket socket = serverSocket.accept();
System.out.println("服务器端socket=" + socket.getClass());
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
if(!(s.equals("name"))){
System.out.println("你说啥呢");
}
System.out.println(s);
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("我是刘任");
bufferedWriter.newLine();//插入一个换行符,表示写入的内容结束,要求对方使用readLine方式读取
bufferedWriter.flush();//如果使用字符流,需要手动刷新
String s1 = bufferedReader.readLine();
if(!(s1.equals("hobby"))) {
System.out.println("你说啥呢");
}
System.out.println(s1);
bufferedWriter.write("编写java程序");
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();
}
}