java 网络编辑实现多人聊天

版权声明:本文为博主原创文章,未经博主允许不得转载。多多评论,与博主一起学习编程。 https://blog.csdn.net/Roobert_Chao/article/details/78704231

java 网络编辑实现多人聊天。

1、网络编程主要是指完成C/S程序的开发,程序的开发结构有两种:

  • C/S(客户端/服务器),开发两套程序,两套程序需要同时维护。

  • B/S(浏览器/服务器),开发一套程序,客户端使用浏览器进行访问。

2、C/S程序主要可以完成以下两种程序的开发:

  • TCP:传输控制协议,采用三方握手的方式,保证准确的连接操作。

  • UDP:数据报协议,发送数据报。

  • 所有的开发包都保存在java.net包中。

TCP程序编写。

  • 服务器使用ServerSocket和Socket两个类完成

  • 客户端使用Socket 类完成。

1、编写服务端。

首先,使用ServerSocket类编写服务器端,构造的时候传入监听的端口号。

  • ServerSocket server = new ServerSocket(端口号); //在【端口号】端口监听。

之后,可以添加说出语句System.out.println("等待客户端连接···");

紧接着,使用accept()方法接收客户端的连接。

  • Socket client=server.accept();//程序执行到此位置进行等待

  • 设置为死循环,先拿到Socket,把accept()作为循环式的等待,之后多少个客户端都可以连接上了。

每一个Client对Server来讲都是一个Socket对象。

yi、服务器向客户端输出:使用getOutputStream()方法取得客户端的输出流。
getOutputStream()客户端的输入流。
PrintStream out = new PrintStream(client.getOutputStream());
OutputStream out = socket.getOutputStream();

er、客户端接收服务器端输入的内容:使用getInputStream()方法得到。
getInputStream()客户端的输出流。
InputStream in = socket.getInputStream();

2、编写客户端。

Socket在实例化的时候要指定连接的主机和端口号。

首先,Socket的实例化:

  • Socket client = new Socket("localhost", 9999);

InputStream input = client.getInputStream();// 得到输入流

通过上述,发现:
一丶ServerSocket类

  • public ServerSocket(int port) throws IOException构造的时候传入监听的端口号

  • public Socket accept() throws IOException接收客户端的连接
    二丶Socket类

  • Socket(String host,int port) throws
    UnknownHostException, IOException指明要连接的服务器名称和端口号
  • getInputStream()得到客户端的输入流
  • getOutputStream()得到客户端的输出流

ECHO程序。

--客户端任意输入内容,之后服务器端在输入的内容前加上"ECHO"返回给客户端。

明确:
- 服务器端的输出流就是客户端的输入流。
- 客户端的输出流就是服务器端的输入流。

为服务器端加入多线程。

如果现在要想进行多个客户端的连接,则必须加入多线程的处理机制,将每一个连接的客户端都创建一个新的线程对象。

UDP程序。

UDP属于不可靠的连接,使用数据报协议进行发送,主要使用以下的两个类:

  • 数据报:DatagramPacket

  • 数据报的 Socket:DatagramSocket

服务器端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class MyServer {
public static void main(String[] args) throws Exception {
String info = "Hello World";// 要发送的信息
// 将信息封装成数据报
DatagramPacket dp = new DatagramPacket(info.getBytes(), 0, info
.length(), InetAddress.getByName("localhost"), 6000);// 客户端在6000端口监听
DatagramSocket server = new DatagramSocket(3000);// 服务器的端口
server.send(dp);// 发送数据报
server.close();
}
}

客户端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class MyClient {
public static void main(String[] args) throws Exception {
byte b[] = new byte[1024];// 接收内容
DatagramPacket dp = new DatagramPacket(b, b.length);// 接收内容
DatagramSocket client = new DatagramSocket(6000);// 客户端在6000端口等待
client.receive(dp); // 接收内容
System.out.println(new String(dp.getData(), 0, dp.getLength()));
client.close();
}
}

以上表示接收服务器端发送来的信息。
但是执行的时候首先要运行客户端,之后再运行服务器端。

猜你喜欢

转载自blog.csdn.net/Roobert_Chao/article/details/78704231