这里我使用的是 sunny-ngrok 的免费域名,连接端口都没有问题,运行也是服务端先运行再运行客户端。但是为什么会提示连接失败呢?
import org.junit.Test;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 实现 TCP 网络通讯
* 客户端发送文件给服务端,服务端保存文件至本地
*/
public class TCPTestTwo {
/*
客户端
*/
@Test
public void client() {
Socket socket = null;
OutputStream os = null;
BufferedInputStream bis = null;
try {
socket = new Socket(InetAddress.getByName("64.69.43.110"), 8809);
os = socket.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(new File("test.png")));
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
服务端
*/
@Test
public void server() {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream is = null;
BufferedOutputStream bos = null;
try {
serverSocket = new ServerSocket(8809);
socket = serverSocket.accept();
is = socket.getInputStream();
bos = new BufferedOutputStream(new FileOutputStream(new File("test5.png")));
byte[] bytes = new byte[1024];
int len;
while ((len = is.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}