socket编程(java)
简介
Socket(套接字)是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口,允许应用程序通过网络进行数据传输,实现不同主机之间的通信。
Socket可以看作是一种抽象的概念,用于描述网络通信的端点。它包含了通信所需的各种参数和状态信息,以便应用程序能够通过它进行数据的发送和接收。
TCP/IP协议
要理解socket必须的得理解tcp/ip,它们之间好比送信的线路和驿站的作用,比如要建议送信驿站,必须得了解送信的各个细节。
TCP/IP协议不同于iso的7个分层**(层层封装,层层解封。越往下层,封装的越多)**,它是根据这7个分层,将其重新划分,好比打扫卫生,本来有扫帚,垃圾斗,抹布,涂料,盆栽等就好比OSI的标准几个分层,tcp/ip根据用途和功能,将扫帚,垃圾斗放到粗略整理层,抹布涂料放到中度整理层,盆栽放到最终效果层。这里TCP/IP也对OSI的网络模型层进行了划分:大致如下:
TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU
tcp连接
服务端
/**
* 服务端--tcp
* @Author zh
*/
public class Server {
public final static String host = "127.0.0.1";
public final static int port = 22222;
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务端等待连接中。。。。。。");
//获取客户端链接
Socket accept = server.accept();
//链接到客户端
System.out.println("获取到客户端连接,ip地址为:"+accept.getRemoteSocketAddress());
// 输出流
PrintWriter out = new PrintWriter(accept.getOutputStream(),true);
//网络输入流
BufferedReader in = new BufferedReader(new InputStreamReader(accept.getInputStream()));
String message;
while(true){
message = in.readLine();
if(message.equalsIgnoreCase("exit")){
break;
}
System.out.println("客户端消息:"+message);
//给客户端响应
out.println(new Date()+"---服务端收到您的信息,信息为:"+message);
}
//关闭连接
accept.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端
/**
* 客户端--tcp
* @Author zh
*/
public class Client {
public static void main(String[] args) {
//创建连接
try {
Socket socket = new Socket(Server.host, Server.port);
System.out.println("连接到---"+Server.host+":"+Server.port);
//获取网络输入流和输出流
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取控制台输入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String message;
while(true){
System.out.println("输入消息(输入exit退出):");
message = reader.readLine();
if(message.equalsIgnoreCase("exit")){
break;
}
out.println(message);
String response = in.readLine();
System.out.println("服务端的响应:"+response);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}