CoreJava 第11章:网络编程

原文:http://blog.csdn.net/qjyong/archive/2009/09/15/4556527.aspx
author:qjyong

1.端口号:标识计算机的某一网络程序,TCP和UDP可使用同一端口

2.
传输协议:
TCP:传输控制协议:面向连接,数据传输可靠,有序(数据完整,效率低).
(ServerSocket和Socket类)
UDP:用户数据报协议:面向非连接,不可靠,无序(不保证完整性,效率高,
一次最多64kb)
DatagramSocket,DatagramPacket,MulicastSocket.

应用协议:HTTP,FTP,TELNET,SMTP;

3.InetAddress(IP或域名抽象)
InetAddress.getByName("IP");//获得实例.

4.Socket套接字
1)流式套接字(TCP):IO流进行传输,双向
2)数据报式套接字(UDP):数据报传输.

5.TCP编程
a)ServerSocket:监听端口,接收客户端连接
ServerSocket(int port);
accept() //监听,接收,返回客户端套接字(接收到连接前一直阻塞)
close()
b)Socket 客户端套接字
getInputStream()  关闭InputStream,OutputStream将关闭套接字
close 将关闭InputStream,OutputStream

6.udp编程
要发送的数据长度用字节数组.length来获取。接收数据的缓冲区应该指定为UDP可发送的字节最大数(65536)。64K

7.多接受者
广播(broadcast):发送给本地网络所有计算机
多播(Multicast):发送给感兴趣的计算机.加入指定的多播组
224.0.0.0-239.255.255.255

8.URL getConnetion 到url的远程对象连接

8. URLEncoder和URLDecoder类
HTML格式的编码工具类
对‘a-zA-Z0-9.*_-’之外的字符都会进行编码。(空格会转换成+)

//client
public class TCPClient {

	/**
	 * @param args
	 * @author likf
	 * @throws IOException
	 * @throws UnknownHostException
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {
		try {
			System.out.println("start client...");
			Socket socket = new Socket("127.0.0.1", 4700);
			BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
			PrintWriter os = new PrintWriter(socket.getOutputStream());
			BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String readline;

			int i = 0;
			do {
				if (i > 0) {
					System.out.println();
					String getLine=is.readLine();
					System.out.println(i + "=========================");
					System.out.println("Server:" + getLine);
					System.out.println("=========================");
					System.out.print("reading:");
				}
				readline = sin.readLine();//read
				os.println(readline);
				os.flush();
				i++;
			} while (!readline.equals("bye!"));
			os.close();
			is.close();
			socket.close();
		} catch (Exception e) {
			System.out.println("Error" + e);
		}
	}

	public static void client() throws UnknownHostException, IOException {
		Socket client = new Socket("127.0.0.1", 6789);
		PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()), true);
		out.println("要发送给服务器端的请求数据");
		BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
		in.readLine(); //读取一行。在读取一行前会阻塞。
		client.close();
	}
}

//server
public class TCP {
	public static void main(String[] args) throws IOException {
		try {
			int i=Integer.parseInt("1");//获取int
			int ii=Integer.valueOf("11");//获取int
			System.out.println("start server..");
			ServerSocket server = null;
			try {
				server = new ServerSocket(4700);
			} catch (Exception e) {
				System.out.println("can not listen to:" + e);
			}
			Socket socket = null;
			try {
				socket = server.accept();
				//使用accept()阻塞等待客户请求,有客户
				//请求到来则产生一个Socket对象,并继续执行
			} catch (Exception e) {
				System.out.println("Error." + e);
			}
			String line;
			BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			PrintWriter os = new PrintWriter(socket.getOutputStream());
			BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
			do{
				String getLine=is.readLine();
				print(getLine);
				line=sin.readLine();
				os.println(line);
				os.flush();
			} while (!line.equals("bye")); 
			os.close(); 
			is.close(); 
			socket.close(); 
			server.close(); 
		} catch (Exception e) {
			System.out.println("Error:" + e);
		}
	}

	public static void print(String s){
		System.out.println();
		System.out.println("=========================");
		System.out.println("Client:" +s );
		System.out.println("=========================");
		System.out.print("reading:");
	}
	
	public static void server() throws IOException {
		ServerSocket server = new ServerSocket(6789);
		Socket client = server.accept(); //在接收到客户端连接前,会阻塞,直到获取数据
		BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
		in.readLine(); //读取一行。在读取一行前会阻塞。
		PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()), true);
		out.println("要返回给客户端的响应数据");
		client.close();
		server.close();
	}

}

你可能感兴趣的:(编程,socket,网络应用,OS,网络协议)