Java (网络编程)

网络编程的基础知识
网络协议与TCP/IP
IP地址和Port(端口号)
本地回路的IP地址:127.0.0.1
端口号的范围为0~65535之间,0~1032之间的端口数是用于一些知名的网络服务和应用。
UDP与TCP
TCP 传输控制协议,是面向连接通信协议
UDP 用户数据报协议,是无连接通信协议
什么是Socket?
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接。Socket是TCP/Ip协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
Socket通讯的过程
Server端Listen(监听)某个端口是否有链接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accpt (接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write方法与对方通信。
包括以下四个基本步骤:
(1)创建Socket;
(2)打开链接到Socket的输入/输出流
(3)按照一定的协议对Socket进行读/写操作
(4)关闭Socket
创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端,这是两个封装得非常好的类,使用很方便,其构造方法如下:
Socket(String host ,int port);
Socket(String host,int port,boolean stream);
Socket(InetAddress address,int port);
Socket(InetAddress address,int port,boolean stream);
其中address,host和port分别是双向连接中另一方的IP地址,主机名,端口号,Stream指明Socket是流Socket还是数据报socket


UDP网络程序
DatagramSocket类
DatagramSocket类 用于创建和收发UDP数据包的Socket对象
构造函数:
public DatagramSocket()
public DatagramSocket(int port)
public DatagramSocket(int port,InetAddress laddr)
close()//通知驱动程序释放DatagramSocket ()的资源
send(DatagramPacket p)//发送UDP数据包
receive(DatagramPacket p)//接收UDP数据包


DategramPacket类
如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接受数据的集装箱。
构造函数:
public DatagramPacket(byte[]buf,int length)
public DatagramPacket(byte[]buf,int length,InetAddress address,int port)

getInetAddress和getPort方法
getData和getLength方法
InetAddress类
InetAddress类是用于表示计算机IP地址的一个类,而在日常应用中的计算机地址是用“192.168.0.1”等字符串的格式来表示的

getBYName()
getHostAddress()
简单的UDP接受和发送程序


最简单的UDP程序
用UDP编写网络聊0天程序
分为三个步骤来完成:
1.编写图形用户界面
2.编写网络消息发送功能
3. 编写网络消息接收功能

 Chat.java
package net;

import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;

public class Chat extends Frame {
	List lst = new List(6);// 定义列表框
	TextField tfIP = new TextField(15);
	TextField tfData = new TextField(20);
	DatagramSocket ds = null;

	public Chat() {

		try {
			ds = new DatagramSocket(3000);
		} catch (SocketException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		this.add(lst, "Center");// 将列表框增加到窗口的上方

		Panel p = new Panel();
		this.add(p, "South");// 将Panel增加到窗口的下方
		p.setLayout(new BorderLayout());
		p.add(tfData, "East");
		p.add(tfIP, "West");// 将IP 文本框显示在左边
		new Thread(new Runnable() {
			public void run() {
				byte[] buf = new byte[1024];
				DatagramPacket dp = new DatagramPacket(buf, 1024);
				while (true) {
					try {
						ds.receive(dp);
						lst.add(new String(buf, 0, dp.getLength()) + "from"
								+ dp.getAddress().getHostAddress() + ":"
								+ dp.getPort(), 0);
					} catch (IOException e) {
						if (!ds.isClosed()) {
							e.printStackTrace();

						}// TODO Auto-generated catch block

					}

				}
			}

		}).start();
		tfData.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				byte[] buf;
				buf = tfData.getText().getBytes();
				try {
					DatagramPacket dp = new DatagramPacket(buf, buf.length,
							InetAddress.getByName(tfIP.getText()), 3000);
					ds.send(dp);// 取出消息文本框中的数据和IP地址文本的信息
				} catch (Exception ex) {
					ex.printStackTrace();

				}
				tfData.setText("");// 清空消息文本的内容
			}

		});
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				ds.close();
				dispose();
				System.exit(0);
			}
		});
	}

	public static void main(String args[]) {
		System.out.println("Starting Chat...");
		Chat mainFrame = new Chat();
		mainFrame.setSize(300, 400);
		mainFrame.setTitle("Chat");
		mainFrame.setVisible(true);
		mainFrame.setResizable(false);// 窗口大小不可变

	}
}


 

TCP网络程序的工作原理

TCP客户端程序与TCP服务器端程序的交互过程:
1. 服务器创建一个ServerSocket然后调用accept方法等待客户来连接
2. 客户端程序创建一个Socket并请求与服务器建立连接
3. 服务器接受客户的连接请求,并创建一个新的Socket与该客户建立专线连接
ServerSocket
构造函数:
public ServerSocket()
public ServerSocket(int port)
public ServerSocket(int port ,int backlog)//backlog用于指定服务器忙的时候保持等待的客户数量
public ServerSocket(int port ,int backlog,InetAddress bindAddr)//InetAddress指定ServerSocket绑定的IP地址

close() //将ServerSocket对象关闭,释放资源。系统将ServerSocket占用的端口分配给其他程序
accept()//等待客户端的连接请求
Socket
构造函数
public Socket()

public Socket(String host,int port)

public Socket(InetAddress ddress)

public Socket()

 

 

你可能感兴趣的:(Java (网络编程))