这个是如何实现的呢?今天我就用java来实现聊天功能。
首先,我们先在一个包下创建两个类,分别为客户端类(MyClient)和服务端类(MyServer)。
接下来,就可以往里面写代码了。代码如下:
先在MyClient类里创建一个socket连接,用来发送字节流:
Socket socket = new Socket("127.0.0.1",9999);
"127.0.0.1"为本机IP,9999为端口号。
在MyServer类里创建一个new ServerSocket俩接收字节流:
ServerSocket server = new ServerSocket(9999);
传入端口号9999,必须与之前设置的端口号一致。
然后用server里的accept()方法来与Socket建立连接:
Socket socket = server.accept();
连接成功后就可以发送或接收字节流了。
我们先用MyServer端来发送字节:
OutputStream out = socket.getOutputStream();
用socket调用getOutputStream()方法来获取字节输出流,然后用OutputStream out来接收。
从键盘输入一段字符串作为要发送的内容:
Scanner input = new Scanner(System.in);
String str = input.next();
用out调用write()方法来发出你要发送的内容,由于write()只接受字节,所以要用字符串的getBytes()放来将字符串转为字节数组:
out.write(str.getBytes());
内容发送后,我们用MyClient端来接收MyServer端发送来的字节:
InputStream in = socket.getInputStream();
用socket调用getInputStream()方法来获取字节输入流,然后用OutInStream in来接收。
由于它要接收的字节流的类型是字节类的,所以先定义一个字节数组来存放收到的字节:
byte[] bt = new byte[1024];
字节数组大小设置为1024B,也就是1KB。
用in调用read()放来读取接收到的字节:
in.read(bt);
传入字节数组bt。
最后输出内容:
注意输出的时候要把字节数组再次转化为字符串。
在MyClient端回复消息与之前MyServer发送消息的代码是一样的,MyServer接收回复的消息和MyClient接收消息的代码也是一样的。
注意:代码最后要将所有的流都关闭。
以上就是一次聊天的代码,但这只能发送和接收一次信息。
但聊天要不停的发送和接收信息,所以把代码放到一个循环操作里,这里我用的是do while循环。如下图:
MyClient端代码
MyServer端代码
(这个代码只能发送文字,并不能发送图片和视频)
领取专属 10元无门槛券
私享最新 技术干货