网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。
http://java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。
http://java.net包中提供了两种常见的网络协议的支持:
TCP:TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP/IP。
UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据报。
本案例以TCP协议为例,结合多线程,实现一个多人同时聊天的聊天室。
释放资源:
package com.bjwyj.chat;
import java.io.Closeable;
public class Utils {
/*** 释放资源*/
public static void close(Closeable... targets) {
for(Closeable target:targets) {
try {
if(target!=null) {
target.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
服务器端:
package com.bjwyj.chat;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 在线聊天室:服务端
* 目标:加入容器实现群聊和私聊
*
* @author 吴永吉
*
*/
public class Chat {
private static CopyOnWriteArrayList all = new CopyOnWriteArrayList<>();
public static void main(String[] args) throws IOException {
System.out.println("------server------");
//1.指定端口:使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(9999);
//2.阻塞式等待连接accept
while(true) {
Socket client = server.accept();
System.out.println("一个客户端建立了连接");
Channel c = new Channel(client);
all.add(c);