一、基础概念
1、客户端与服务端
百度百科上的专业术语用多说,现在我想用最通俗易懂的语言来向大家描述一下这两个东西的概念
实际上两者不可分割,所以他们的概念会包含彼此
客户端:客户也就是你,客服端也就是你这一端可以接触到的程序,手机app,web网页等,我们可以在客户端的界面上向服务器发送请求以及数据,交给服务器处理
服务端:也就是提供为客户端提供“服务”,接收并储存客户端发送过来的数据或请求,并且对请求进行响应,发送数据给客户端
举个例子:
所以我们在聊天时,发送给对方的信息是通过服务端间接转发的,客户端与客户端之间并没有直接交互。而且服务端也会有专门的算法对发送过来的信息进行检测。
2、IP地址与端口号
IP地址:用于找到主机,由网络地址与主机地址组成,网络地址表示互联网的哪一个网络,主机地址表示其属于网络下的哪一台主机。
端口号:用于找到主机下的特定进程提供的服务,每一个服务器都有独一无二的端口号
通俗来说,IP相当于小区地址,端口号相当于门牌号。
客户端只有知道小区号与门牌号才可以进门,接受服务端的服务
若端口号错误,就进错门了。
3、输入、输出流
客户端与服务端相互发送的数据都放在在输入,输出流里
获取信息从输入流中获取
InputStream in = client.getInputSream();
int i = in.read();//返回值为int型
但是read方法若是没有从输入流读到数据,就会一直阻塞在这里,直到读到信息为止,才会执行接下来的代码。
输出需要发送的信息在输出流中
OutputStream out = client.getOutputSream();
out.write();//参数类型为Byte或者Byte[]
二、服务端代码
创建服务端的核心代码非常简单
ServerSocket server = new ServerSocket(PORT);//PORT为指定的端口号,int类型
完整代码如下:
public class Server {
public final int PORT = 9999;//端口号
private ServerSocket server;//服务端
private Socket client;//客户端
private InputStream ins;
private ObjectInputStream objectins;
public Server(){
try {
server = new ServerSocket(PORT);
}catch (IOException e){
e.printStackTrace();
}
}
public void getClient(){
try {
//等待客户机的连接
client = server.accept();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server server = new Server();
server.getClient();
}
}
如果像连接其他人电脑上的服务端,保证两台电脑在同一个网络下,将客户端的IP改为对方的IP即可
查看本机IP
ipconfig
accpet()方法
作用:用于接收连接服务端的客户端,如果一直没有客户端连接,就会阻塞在这里,直到有客户端连接
如果想要连接多个客户端,那么就可以这样
while(true){
Socket client = server.accept();
}
三、客户端代码
public class ClientCnn {
public Socket socket;
OutputStream outs;
public final int PORT = 9999;
String IP = "127.0.0.1";//本机IP地址
//连接服务器
public boolean cnnToServer() {
try {
socket = new Socket(IP,PORT);
//获取输入输出流
InputStream ins = socket.getInputStream();
outs = socket.getOutputStream();
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
若是服务端代码没有先于客户端代码运行,cnnToServer()方法就会返回false。
总结:
客户端:客户可以操纵的程序
服务端:为客户端提供服务的程序
IP:用于找到主机
端口:用于找到主机下某一特定进程的服务
输入流:接收信息
输出流:发送信息