一、项目概述
本项目是一个基于客户端和服务端实现的界面视频通信软件(仿QQ),对于小白来说,先解决最基本的发送消息的功能;接下来,可以进一步的视频、语音、文字、图形等传输功能。在该项目中使用的主要socket模块实现网络连接的过程,计算机网络,多线程等知识。
二、项目分析
1.Socket类
Socket类是用来实现客户端套接字的。套接字是两台机器之间通信段端点,通俗来说,套接字就类似一个连接的结点。创建ServerSocket时,ServerSocket提供的构造方法有五个,其中比较常用的有ServerSocket(int port),该方法的作用是创建流套接字并将其连接到指定主机上的指定端口号。
2.Java中网络通信原理
Java中实现网络通信是通过Socket类实现的,Socket中分为ServerSocket和Socket两大类,ServerSocket用于服务端类,可以通过accept()方法来监听请求,监听请求后返回Socket。Socket是指用来完成数据传输的。具体连接过程可以分为以下步骤:
- 通过ServerSocket来创建一对象,然后使用accept()方法来进行监听,等待请求;当接收到请求后accept方法返回一个Socket。
- 使用accept()方法返回的Socket与客户进行通信。
具体代码如下:
服务端
public class Server{
public static void main(String[] args){
try{
//创建一个ServerSocket实例对象
ServerSocket serversocket = new ServerSocket(5000);
//等待请求(阻塞)
Socket socket = serversocket.accept();
//获取输出流
OutputStream os = socket.getOutputStream();
//准备一条消息
String msg = "hello world 你好奥 ";
int length = msg.getBytes().length;
os.write(length);
System.out.println("长度" + msg.getBytes().length);
//发送
os.write(msg.getBytes());
}catch(IOException e){
e.printStackTrace();
}
}
}
客户端
public class Client {
public static void main(String[] args) {
new Client().createSocket();
}
private Socket socket_client = null;
public void createSocket(){
try {
Socket socket_client = new Socket("localhost", 5000);
System.out.println("启动客户端");
InputStream is = socket_client.getInputStream();
System.out.println("开始读取消息!!");
int length = is.read();
// 遍历一个个字节读取 (只能读取字母+数字符号)
byte[] o = new byte[length];
is.read(o);
String message = new String(o);
System.out.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
总体来说,该类最主要的代码如下:
服务端
public class server{
serverSocket = new ServerSocket(5000);
Socket socket_server = serverSocket.accept();
OutputStream os = socket_server.getOutputStream();
os.write(msg.getBytes());
}
客户端
public class client{
Socket socket_client = new Socket("localhost", 5000);
InputStream is = socket_client.getInputStream();
is.read(o);
}
仿QQ视频通信项目(一)总结
本文章只是分析了第一步简单实现消息互相传送,其他功能后面的博客会继续分享~