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();
}
}
以上表示接收服务器端发送来的信息。
但是执行的时候首先要运行客户端,之后再运行服务器端。