网络
两台计算机通过协议和网络进行通信
IP地址:网络上的唯一标识。
IP的组成:32位,由4个8位二进制组成(每一位最大值是255,每一位十进制标识 0-255),但由于过长,不好记,则改为十进制,如:192.168.1.1。
协议:为了让网络中不同计算机之间能够相互通信而建立的规则、标椎、约定。例如:
-
TCP协议:面向连接的、可靠的(不丢失、不重复、有序)、基于字节流的传输通信协议。
-
UDP协议:无连接的协议。在传输数据之间,客户端和服务端之间不建立和维护连接。提供不可靠的数据传输。
socket(套接字):基于TCP协议的网络通信,可以提供双向安全连接的网路通信。socket需要借助数据流来完成数据的传递工作。
可见:发送数据,OutputStream
接收数据:InputStream
传输数据的步骤:
-
客户端建立连接,服务端准备服务
-
通过Socket生成InputStream和OutputStream(准备发送数据)
-
使用InputStream和OutputStream进行发送、接收数据
-
关闭InputStream和OutputStream、socket
服务端代码:
package com.mokuiran.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class MyServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream in = null;
BufferedReader reader = null;
OutputStream out = null;
try {
// 1. 准备服务,ip默认本机127.0.0.1,端口8080
serverSocket = new ServerSocket(8888);
//准备完毕,可以监听客户端请求
socket = serverSocket.accept();//一直阻塞,直到有客户端连接
System.out.println("服务端检测到客户端连接成功!");
// 2. 通过Socket生成InputStream和OutputStream(准备发送数据)
in = socket.getInputStream();//字节流
//带缓冲区的字符流,将字节流转换为效率更高的字符流
reader = new BufferedReader(new InputStreamReader(in));
String info = null;
while ((info = reader.readLine()) != null){
System.out.println("i am server,接收到客户端信息是:"+info);
}
socket.shutdownInput();
// 服务端做出反馈
out = socket.getOutputStream();
out.write("welcome client...".getBytes());
socket.shutdownOutput();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (out!=null) out.close();
if (reader!=null) reader.close();
if (in!=null) in.close();
if (socket!=null) socket.close();
if (serverSocket!=null) serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码:
package com.mokuiran.socket;标签:socket,通信,客户端,reader,cs,close,null,out From: https://www.cnblogs.com/mokuiran/p/16644778.html
import java.io.*;
import java.net.Socket;
//客户端
public class MyClient {
public static void main(String[] args) {
Socket socket = null;
OutputStream out = null;
InputStream in = null;
BufferedReader reader = null;
try {
socket = new Socket("127.0.0.1",8888);
System.out.println("客户端连接成功!!");
out = socket.getOutputStream();
out.write("hello server".getBytes());//发送消息
socket.shutdownOutput();
//接收服务端的反馈
in = socket.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
String info = null;
while ((info = reader.readLine()) != null){
System.out.println("i am client,接收到的服务器端消息:"+info);
}
socket.shutdownInput();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) reader.close();
if (in != null) in.close();
if (out != null) out.close();
if (socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}