最近学习的内容是网络编程这一块,先对TCP这部分做一下总结。
TCP提供了客户端 - 服务器应用程序相互通信的可靠的点对点通信通道。要通过TCP进行通信,客户端程序和服务器程序建立彼此的连接。每个程序将一个套接字绑定到其连接的末端。要进行通信,客户端和服务器都会读取并写入连接到该连接的套接字。
接下来套接字就是重点了,那么什么是套接字呢?套接字其实就是两个程序之间的双向通信连接的一个端点。Socket类表示这两个程序之间的连接。Socket有两个类:客户端(Socket)和 服务端(ServerSocket)
为了更直观的感受,上示意图:
最后送上源代码:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
//客户端源码
public class TCPClientTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//创建套接字实例
Socket socket = new Socket("127.0.0.1",12306);
//建立输出流,把a.txt的内容读出存储在msg内
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
byte[] a = new byte[512];
int len = bis.read(a);
String msg = new String(a,0,len);
//使用套接字的getOutputStream方法向服务端传输
OutputStream os = socket.getOutputStream();
os.write(msg.getBytes());
os.flush();//一定要加,不然服务端就收不到数据
//关闭流
bis.close();
os.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//服务端存放文件的位置
String path = "D:\\万物\\蓝桥作业\\a.txt";
try {
// 创建socket实例
ServerSocket server = new ServerSocket(12306);
Socket socket = server.accept();
//创建输入流接受来自客户端的数据
InputStream is = socket.getInputStream();
byte[] a = new byte[512];
int len = is.read(a);
String str = new String(a,0,len);
//存储数据在指定的文件中
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
bos.write(str.getBytes());
//关闭流
bos.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}