一、认识Socket
- 套接字Socket=(IP地址:端口号)。
- 应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
- socket是“open—write/read—close”模式的一种实现。
二、TCP网络程序
实现步骤:
(1)客户端:1.连接服务器Socket;2.发送消息。
(2)服务端:1.建立服务端口ServerSocket;2.等待用户连接accept;3.接收消息。
TcpServer
package tcp;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
//1.生成一个服务器地址
serverSocket = new ServerSocket(9999);
//2.等待客户端连接
socket = serverSocket.accept();
//3.读取客户端消息
is = socket.getInputStream();
//4.使用管道流
baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while((len=is.read(buffer))!=-1){
baos.write(buffer,0,len);
}
System.out.println(baos.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
if(baos!=null){
baos.close();
}
if(is!=null){
is.close();
}
if(socket!=null){
socket.close();
}
if(serverSocket!=null){
serverSocket.close();
}
}
}
}
TcpClient
package tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws IOException {
Socket socket = null;
OutputStream os = null;
try {
//1.获取服务器地址和端口
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
int port = 9999;
//2.创建一个socket连接
socket = new Socket(serverIP,port);
//3.发送消息
os = socket.getOutputStream();
os.write("hello,小花".getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
if(os!=null){
os.close();
}
if(socket!=null){
socket.close();
}
}
}
}
四、Tcp实现文件上传
TcpSrever
package tcpFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
//1.创建一个端口
ServerSocket serverSocket = new ServerSocket(9000);
//2.监听客户端的连接
Socket socket = serverSocket.accept();
//3.获取输入流
InputStream is = socket.getInputStream();
//4.文件输出,receive为接收到的文件的命名
FileOutputStream fos = new FileOutputStream(new File("receive"));
byte[] buffer = new byte[1024];
int len;
while((len=is.read(buffer))!=-1){
fos.write(buffer,0,len);
}
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}
TcpClient
package tcpFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws IOException {
//1.创建一个socket连接
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
//2.创建一个输出流
OutputStream os = socket.getOutputStream();
//3.文件流,文件需存放在项目根目录下
FileInputStream fis = new FileInputStream(new File("头像.jpg"));
//4.写出文件
byte[] buffer = new byte[1024];
int len;
while((len=fis.read(buffer))!=-1){
os.write(buffer,0,len);
}
fis.close();
os.close();
socket.close();
}
}