Java网络编程
InetAddress对象的常见使用方法
//获取本机的InetAddress对象
InetAddress localhost = InetAddress.getLocalHost();
System.out.println(localhost);
//根据指定的主机名获取InetAddres对象
InetAddress host = InetAddress.getByName("LAPTOP-9C26JBRD");
System.out.println(host);
//根据域名返回InetAddres对象,比如www.baidu.com
InetAddress hostBaidu = InetAddress.getByName("www.baidu.com");
System.out.println(hostBaidu);
//通过 InetAddress对象获取对应地址
String hostAddress = hostBaidu.getHostAddress();
System.out.println(hostAddress);
//通过 InetAddress对象获取对应域名或者主机名
String hostName = hostBaidu.getHostName();
System.out.println(hostName);
//结果
LAPTOP-9C26JBRD/192.168.23.1
LAPTOP-9C26JBRD/192.168.23.1
www.baidu.com/14.215.177.38
14.215.177.38
www.baidu.com
Socket
客户端:
当我们需要通讯时(读写数据)
1.socket.getOutputStream()
2.socket.getInputStream()
服务端:
当我们需要通讯时(读写数据)
1.socket.getOutputStream()
2.socket.getInputStream()
客户端和服务器端通常情况下,是在不同主机的
TCP应用案例1
1.编写一个服务器端和客户端
2.服务器端在9999端口监听
3.客户端连接到服务器端,发送“hello,server”,然后退出
4.服务器端接收到客户端发送的信息,输出,并退出
服务器端
package com.zz.socket.server;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Projectname: socket
* @Filename: SocketTcpServer
* @Author: wyf
* @Data: 2022/12/1 10:51
* @Description: TODO
*/
public class SocketTcpServer {
public static void main(String[] args) throws IOException {
//1.在9999端口监听,等待连接
//要求没有其他服务监听9999
//serverSocket可以返回多个socket
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端,在9999端口监听,等待连接");
//2.当客户端没有连接9999端口时,程序会阻塞,等待连接
//如果有客户端连接,则会返回socket对象
Socket socket = serverSocket.accept();
System.out.println("服务器端:socket="+socket.getClass());
//3.通过socket.getInputStream()读取客户端写入到数据通道的数据显示
InputStream inputStream = socket.getInputStream();
//4.Io读取
byte[] bytes = new byte[1024];
int readLen = 0;
while ((readLen = inputStream.read(bytes)) != -1){
System.out.println(new String(bytes, 0, readLen));
}
//5.关闭相关流
inputStream.close();
socket.close();
serverSocket.close();
}
}
客户端
package com.zz.socket.client;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @Projectname: socket
* @Filename: SocketTcpClient
* @Author: wyf
* @Data: 2022/12/1 10:58
* @Description: TODO
*/
public class SocketTcpClient {
public static void main(String[] args) throws IOException {
//1.连接服务端
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端:socket="+socket.getClass());
//2.连接上后生成socket,通过socket.getOutputStream()
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到数据通道
outputStream.write("hello server".getBytes());
//4.关闭流对象和socket
outputStream.close();
socket.close();
}
}
TCP应用案例2
1.编写一个服务器端和客户端
2.服务器端在9999端口监听
3.客户端连接到服务器端,发送“hello,server”
4.服务器端接收到客户端发送的信息,输出,然后发送“hello client”并退出
5.客户端接收服务器端发送的数据,输出,并退出
服务器端
package com.zz.socket.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Projectname: socket
* @Filename: SocketTcpServer02
* @Author: wyf
* @Data: 2022/12/1 11:21
* @Description: TODO
*/
public class SocketTcpServer02 {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("正在监听9999端口");
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int readLen = 0;
while ((readLen = inputStream.read(bytes)) != -1){
System.out.println(new String(bytes, 0, readLen));
}
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello client!".getBytes());
//写入结束标记
socket.shutdownOutput();
serverSocket.close();
socket.close();
inputStream.close();
outputStream.close();
}
}
客户端
package com.zz.socket.client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @Projectname: socket
* @Filename: SocketTcpClient02
* @Author: wyf
* @Data: 2022/12/1 11:21
* @Description: TODO
*/
public class SocketTcpClient02 {
public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端开始连接!");
OutputStream outputStream = socket.getOutputStream();
outputStream.write("hello server".getBytes());
//写入结束标记
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int readLen = 0;
while ((readLen = inputStream.read(bytes)) != -1){
System.out.println(new String(bytes,0,readLen));
}
}
}
使用字符流实现应用案例2
服务器端
package com.zz.socket.server;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Projectname: socket
* @Filename: SocketTcpServer
* @Author: wyf
* @Data: 2022/12/1 10:51
* @Description: TODO
*/
public class SocketTcpServer03 {
public static void main(String[] args) throws IOException {
//1.在9999端口监听,等待连接
//要求没有其他服务监听9999
//serverSocket可以返回多个socket
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端,在9999端口监听,等待连接");
//2.当客户端没有连接9999端口时,程序会阻塞,等待连接
//如果有客户端连接,则会返回socket对象
Socket socket = serverSocket.accept();
System.out.println("服务器端:socket="+socket.getClass());
//3.通过socket.getInputStream()读取客户端写入到数据通道的数据显示
InputStream inputStream = socket.getInputStream();
//4.Io读取
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
System.out.println(s);
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("hello client");
bufferedWriter.newLine();
bufferedWriter.flush();
//5.关闭相关流
bufferedWriter.close();
bufferedReader.close();
socket.close();
serverSocket.close();
}
}
客户端
package com.zz.socket.client;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
/**
* @Projectname: socket
* @Filename: SocketTcpClient
* @Author: wyf
* @Data: 2022/12/1 10:58
* @Description: TODO
*/
public class SocketTcpClient03 {
public static void main(String[] args) throws IOException {
//1.连接服务端
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端:socket="+socket.getClass());
//2.连接上后生成socket,通过socket.getOutputStream()
OutputStream outputStream = socket.getOutputStream();
//3.通过输出流,写入数据到数据通道
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("hello server!");
//写入结束标记
bufferedWriter.newLine();
bufferedWriter.flush();
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
System.out.println(s);
//4.关闭流对象和socket
bufferedReader.close();
bufferedWriter.close();
socket.close();
}
}
读取文件
服务端
package com.zz.socket.upload;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Projectname: socket
* @Filename: UploadServer
* @Author: wyf
* @Data: 2022/12/1 14:02
* @Description: TODO
*/
public class UploadServer {
public static void main(String[] args) throws IOException {
//开启服务监听
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("开始监听9999端口号");
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] bytes = new byte[1024];
ByteArrayOutputStream bao = new ByteArrayOutputStream();
int readLen = 0;
while ((readLen = bis.read(bytes)) != -1){
bao.write(bytes, 0, readLen);
}
byte[] bytes1 = bao.toByteArray();
String path = "src\\idea.png";
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
bos.write(bytes1);
bos.close();
bis.close();
serverSocket.close();
socket.close();
}
}
客户端
package com.zz.socket.upload;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @Projectname: socket
* @Filename: UploadClient
* @Author: wyf
* @Data: 2022/12/1 14:02
* @Description: TODO
*/
public class UploadClient {
public static void main(String[] args) throws IOException {
//连接服务器端
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("连接了服务器端!");
String path = "e:\\image\\idea.png";
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
byte[] bytes = new byte[1024];
ByteArrayOutputStream bao = new ByteArrayOutputStream();
int readLen = 0;
while ((readLen = bis.read(bytes)) != -1){
bao.write(bytes, 0, readLen);
}
byte[] bytes1 = bao.toByteArray();
OutputStream outputStream = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
bos.write(bytes1);
bos.flush();
bis.close();
socket.shutdownOutput();
bos.close();
socket.close();
}
}