[笔记]JAVA-网络编程

[课堂笔记]JAVA-网络编程

数据传输

1、传输的数据格式
2、用socket方式来吧相应格式的数据从机器A传到机器B


多机版


《计算机导论》
计算机组成、原理、多媒体、网络、软件系统、硬件系统




网络协议:计算机-计算机进行通信对话的标准语言
TCP/IP协议


网络编程两种方式
URL类方式:
借助Socket




方法1:HTTP协议访问WEB(WWW网页)资源
https://  加密,安全
URL:Uniform Resoure Locator(完整的网络地址)
访问WEB服务器上的资源

URL类
URL url = new URL("http://www.baidu.com");
方法  getProtocol() 获取URL对象的协议名
     getHost() 获取URL对象的主机名
     getPort() 获取URL对象的端口号,若没有设置端口,则返回-1

端口port:计算机进行网络通信,必须要打开一扇门,每一扇门赋予的一个编号就是端口。



   URL 只能读,不能写
   URLConnector           既要读,也要写
   public URLConnector openConnector() throws IPException

   public final InputStream openStream() throws IPException


import java.io.*;
	import java.net.URL;

	public class Test {

		/**
		 * @param args
		 * @throws IOException
		 */
		public static void main(String[] args) throws IOException {
			URL usst = new URL("http://www.usst.edu.com/");
			InputStream in = usst.openStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(in,"utf-8"));
			String str;
			while ((str = br.readLine()) != null)
				System.out.println(str);
			in.close();
		}

	}

练习1:做一个小爬虫demo,把上海理工大学新闻的标题全部爬取出来

import java.io.*;
	import java.net.URL;
	import java.util.regex.Matcher;
	import java.util.regex.Pattern;

public class Test {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		for(int i = 378;i>=300;i--)
		{
		URL usst = new URL("http://www.usst.edu.cn/s/1/t/517/p/2/i/"+i+"/list.htm");
		InputStream in = usst.openStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8"));
		String str;
		while ((str = br.readLine()) != null) {
			Pattern p = Pattern.compile("<font color=''>(.+?)</font>");
			Matcher m = p.matcher(str);
			while (m.find()) {
				System.out.println(m.group(1));
			}
		}
		in.close();
		}
	}

}
方法2:底层的网络协议TCP/UDP协议进行网络资源的通信。
本课程要求会TCP协议


套路模仿
如何封装自己的网络通信数据包格式
TCP协议:Transfer Control Portocol
  面向连接,可靠的传输,慢 
UDP协议:User Datagram Portocol 
  面向无连接,不可靠的传输


server:接受连接,被动等待。打开端口监听(listening),等待客户连接。


client:主动连接对方打开的端口。
端口是一个整数(1-1024)系统会占用
一般自定义端口的数字都比较大
accept是一个阻塞操作,没有执行完,会停止并等待,不会继续往下面运行。
(非阻塞操作:Thread.start())


127.0.0.1地址:代表的是本机回环loopback地址


练习2:完成聊天程序,两个人两台机器来测试(要修改监听的地址)

import java.io.*;
import java.net.*;

public class Server {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		//服务器端
		ServerSocket server;
		server = new ServerSocket(9999);
			//套接字,接受客户端连接,实现TCP/UDP协议通信的基本
		Socket client;
		client=server.accept();//服务器创建一个套接字接受连接
					//accept是一个阻塞操作
		//一旦有客户端连接上,继续进行下面的语句,开始数据的传输
		BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));	
		PrintWriter os = new PrintWriter(client.getOutputStream());
		BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("client发送的消息:"+is.readLine());
		String inputString = sin.readLine();
		while(inputString!=null && !inputString.equals("quit"))
			{
				os.println(inputString);//将数据准备(缓冲器)发送到客户端
				os.flush();//发送
				System.out.println("server发送的信息:"+inputString);
				System.out.println("client发送的消息:"+is.readLine());
				inputString = sin.readLine();
			}
		is.close();
		os.close();
		
		client.close();
		server.close();
		System.out.println("over");
		}

}


import java.io.*;
import java.net.*;


public class Client {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		Socket server = new Socket("127.0.0.1",9999);
		System.out.println("请输入信息:");
		//127.0.0.1地址:代表的是本机回环loopback地址
		BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter os = new PrintWriter(server.getOutputStream());
		BufferedReader is = new BufferedReader(new InputStreamReader(server.getInputStream()));	
		String inputString = sin.readLine();
		while(inputString!=null && !inputString.equals("quit"))
			{
				os.println(inputString);
				os.flush();//发送
				System.out.println("client发送的信息:"+inputString);
				System.out.println("server发送的消息:"+is.readLine());
				inputString = sin.readLine();
			}
			os.close();
			is.close();
			server.close();
			System.out.println("over");
	}

}

网络通信:多线程
p267 例11-4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值