Java 网络编程

来源:互联网 发布:windows更新出现问题 编辑:程序博客网 时间:2024/06/08 16:13

一、TCP/IP协议

为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议。

TCP/IP协议是一个协议组,包含Telnet、FTP、SMTP、NFS、HTTP等协议。

网络接口层:负责接收和发送物理帧;
网络层:负责相邻节点之间的通信;
传输层:负责起点到终点的通信;
应用层:提供诸如文件传输、电子邮件等应用程序。

二、InetAddress类

Java中inelAddress类是针对Java封装的互联网协议(IP)地址,它是Java对IP地址的一种高级标志。

public static void main(String argsp[]) throws UnknownHostException {InetAddress addr = InetAddress.getByName("it.warmtel.com");String hostAddress = addr.getHostAddress();//获取主机地址String hostName = addr.getHostName();//获取主机名System.out.println("主机名:" + hostName + ",\t主机地址:" + hostAddress);}

三、统一资源定位符URL 

1、定义:

URL是一种最为直观的网络定位方式,它表示Internet上的某一资源地址。

2、格式:

<Method>   ://<hostName:PORT>/<PATH>/<FILE>

                  <传输协议>://      <主机名:端口>     /<路径名>/ <文件名>

                  例如:http     端口号默认为80可省略

3、Java中URL类

一个URL对象可以表示一个网络资源。程序利用URL对象能实现Internet寻址、网络资源的定位连接、在客户机与服务器之间直接访问等。

public static void main(String[] args) throws IOException {URL url = new URL("http://www.baidu.com");URLConnection connection = url.openConnection();// 建立链接// 建立缓冲输入流BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));String str;while (br.readLine() != null) {str = br.readLine();System.out.println(str);}}

四、Socket类

1、UDP协议和TCP协议

(1)UDP无连接,TCP面向链接

(2)UDP每个数据包大小限制为64k,TCP可以传输较大的数据

(3)UDP将传输的数据分成小包,直接上网发送。无需建立连接和拆除连接,速度快,但无可靠保证

          TCP每次通信前建立连接,通信结束后断开连接。特点是可以保证传输的正确性、可靠性。

2、Socket是TCP/IP协议的一种编程方式

一个Socket由一个IP地址和一个端口号唯一确定

(1)客户端Socket

/** * 启动客户端 */public void startClient() {try {Socket socket = new Socket(IP, PORT);sendMsg(socket);getMsg(socket);} catch (IOException e) {e.printStackTrace();}}/** * 客户端发送消息 *  * @param socket */public void sendMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(socket.getOutputStream());System.out.println("请输入要发送的消息:");String msg = br.readLine();while (msg != null) {pw.println(msg);pw.flush();System.out.println("发送成功!");System.out.println("请输入要发送的消息:");msg = br.readLine();}socket.close();} catch (IOException e) {e.printStackTrace();}}}).start();}/** * 客户端接收消息 */public void getMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String msg = br.readLine();System.out.println("服务器:" + msg);while (true) {msg = br.readLine();System.out.println("服务器:" + msg);}} catch (IOException e) {}}}).start();}
(2)服务端Soceket

/** * 服务端启动 *  * @throws IOException */public void startServer() throws IOException {ServerSocket sSocket = new ServerSocket(PORT);System.out.println("欢迎进入");sendMsg();while (true) {Socket socket = sSocket.accept();System.out.println("新用户加入聊天");socketList.add(socket);getMsg(socket);size = socketList.size();System.out.println("当前用户人数:[" + size + "]人");}}/** * 服务端群发消息 */public void sendMsg() {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while (true) {System.out.println("请输入要发送的信息:");String msg = br.readLine();for (Socket s : socketList) {PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println(msg);pw.flush();}}} catch (IOException e) {e.printStackTrace();}}}).start();}/** * 服务器接收消息并且转发给除发送信息外其他客户端 */public void getMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {BufferedReader br;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));while (true) {String msg = br.readLine();if (msg != null) {System.out.println("客户端:" + msg);}for (Socket s : socketList) {if (s == socket)continue;PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println(msg);pw.flush();}}} catch (IOException e) {e.printStackTrace();}}}).start();}



0 0