网络编程二(Tcp练习,URL-URLConnection,网络知识,域名解析)

 

 

一.TCP练习

1.网络编程(TCP-客户端并发登录)

/*
客户端通过键盘录入用户名。
服务端对这个用户名进行校验。

如果该用户存在,在服务端显示xxx,已登陆。
并在客户端显示 xxx,欢迎光临。

如果该用户存在,在服务端显示xxx,尝试登陆。
并在客户端显示 xxx,该用户不存在。
最多就登录三次。
*/
import java.io.*;
import java.net.*;
class  LoginClient
{
	public static void main(String[] args) throws Exception
	{
		Socket s = new Socket("192.168.1.254",10008);

		BufferedReader bufr = 
			new BufferedReader(new InputStreamReader(System.in));

		PrintWriter out = new PrintWriter(s.getOutputStream(),true);

		BufferedReader bufIn =
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		for(int x=0; x<3; x++)
		{
			String line = bufr.readLine();
			if(line==null)
				break;
			out.println(line);
			String info = bufIn.readLine();
			System.out.println("info:"+info);
			if(info.contains("欢迎"))
				break;
		}
        	bufr.close();
		s.close();
	}
}

class UserThread implements Runnable
{
	private Socket s;
	UserThread(Socket s)
	{
		this.s = s;
	}
	public void run()
	{
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"....connected");
		try
		{
			for(int x=0; x<3; x++)
			{
				BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));


				String name = bufIn.readLine();
				if(name==null)
					break;


				BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));


				PrintWriter out = new PrintWriter(s.getOutputStream(),true);


				String line = null;


				boolean flag = false;
				while((line=bufr.readLine())!=null)
				{
					if(line.equals(name))
					{
						flag = true;
						break;
					}				
				}
				
				if(flag)
				{
					System.out.println(name+",已登录");
					out.println(name+",欢迎光临");
					break;
				}
				else
				{
					System.out.println(name+",尝试登录");
					out.println(name+",用户名不存在");
				}
			}
			s.close();
		}
		catch (Exception e)
		{
			throw new RuntimeException(ip+"校验失败");
		}
	}
}
class  LoginServer
{
	public static void main(String[] args) throws Exception
	{
		ServerSocket ss = new ServerSocket(10008);


		while(true)
		{
			Socket s = ss.accept();


			new Thread(new UserThread(s)).start();
		}
	}
}

 


二.网络编程(URL-URLConnection)

 

 

 

 

 

 

 

 

 

1.类URL(java.net包)

  1)类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。

  资源可以是简单的文件或目录, 也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询 

  URL 可选择指定一个“端口”,它是用于建立到远程主机 TCP 连接的端口号。如果未指定该端口号,

  则使用协议默认的端口。例如,http 协议的默认端口为 80

 2)构造方法摘要 

  URL(String spec) 

     根据 String 表示形式创建 URL 对象。 

  URL(String protocol, String host, int port, String file) 

     根据指定 protocol、host、port 号和 file 创建 URL 对象。 

  URL(String protocol, String host, int port, String file, URLStreamHandler handler) 

     根据指定的 protocol、host、port 号、file 和 handler 创建 URL 对象。 

  URL(String protocol, String host, String file) 

     根据指定的 protocol 名称、host 名称和 file 名称创建 URL。 

3)方法摘要

  int getDefaultPort() 

     获取与此 URL 关联协议的默认端口号。 

  String getFile() 

     获取此 URL 的文件名。 

  String getHost() 

     获取此 URL 的主机名(如果适用)。 

  String getPath() 

     获取此 URL 的路径部分。 

  int getPort() 

     获取此 URL 的端口号。 

  String getProtocol() 

     获取此 URL 的协议名称。 

  String getQuery() 

     获取此 URL 的查询部分。 

  URLConnection openConnection() 

     返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。 

  InputStream openStream() 

     打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。 

 

 

  注:

  public final InputStream openStream()throws IOException

  打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。此方法是下面方法的缩写: 

   openConnection().getInputStream()



三.URLConnection(java.net包)

  直接已知子类: 

  HttpURLConnection, JarURLConnection 

 

 1)抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。

  此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:

  <1>通过在 URL 上调用 openConnection 方法创建连接对象。 

  <2>处理设置参数和一般请求属性。 

  <3>使用 connect 方法建立到远程对象的实际连接。 

  <4>远程对象变为可用。远程对象的头字段和内容变为可访问。 

  使用以下方法修改设置参数: 

 

 

  setAllowUserInteraction 

  setDoInput 

  setDoOutput 

  setIfModifiedSince 

  setUseCaches 

  使用以下方法修改一般请求属性: 

  setAllowUserInteraction 

  setDoInput 

  setDoOutput 

  setIfModifiedSince 

  setUseCaches 

 使用 setDefaultAllowUserInteraction 和 setDefaultUseCaches 可设置 AllowUserInteraction 和 UseCaches 参数的默认值。 

 

  上面每个 set 方法都有一个用于获取参数值或一般请求属性值的对应 get 方法。适用的具体参数和一般请求属性取决于协议。 

 

  在建立到远程对象的连接后,以下方法用于访问头字段和内容: 

  getContent 

  getHeaderField 

  getInputStream 

  getOutputStream 

 

 

 某些头字段需要经常访问。以下方法: 

  getContentEncoding 

  getContentLength 

  getContentType 

  getDate 

  getExpiration 

  getLastModifed 

 

 

 2)构造方法摘要 

  protected  URLConnection(URL url) 

     构造一个到指定 URL 的 URL 连接。 

  3)方法摘要 

  void addRequestProperty(String key, String value) 

     添加由键值对指定的一般请求属性。 

  abstract  void connect() 

     打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 

  long getIfModifiedSince() 

     返回此对象的 ifModifiedSince 字段的值。 

  InputStream getInputStream() 

     返回从此打开的连接读取的输入流。 

  long getLastModified() 

     返回 last-modified 头字段的值。 

  OutputStream getOutputStream() 

     返回写入到此连接的输出流。 

  Object getContent() 

     获取此 URL 连接的内容。 

  int getContentLength() 

     返回 content-length 头字段的值。 

  String getContentType() 

     返回 content-type 头字段的值。 

  long getDate() 

     返回 date 头字段的值。 



四.网络编程(小知识点)

 

1.Socket:

  1)构造方法摘要 

   Socket() 

     通过系统默认类型的 SocketImpl 创建未连接套接字 

  2)需要方法:

  void connect(SocketAddress endpoint) 

     将此套接字连接到服务器。 

 2.类 SocketAddress(java.net)

  此类表示不带任何协议附件的 SocketAddress。作为一个抽象类,应通过特定的、协议相关的实现为其创建子类。 

  它提供不可变对象,供套接字用于绑定、连接或用作返回值。

3 SocketAddress(java.net)------>InetSocketAddress类

  1)此类实现 IP 套接字地址(IP 地址 + 端口号)。它还可以是一个对(主机名 + 端口号),在此情况下,

  将尝试解析主机名。如果解析失败,则该地址将被视为未解析 地址,但是其在某些情形下仍然可以使用,

  比如通过代理连接。 

  2)构造方法摘要 

  InetSocketAddress(InetAddress addr, int port) 

     根据 IP 地址和端口号创建套接字地址。

 4.ServerSocket:

  构造方法摘要 

  ServerSocket(int port, int backlog) 

     利用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口号。

  参数:

  port - 指定的端口;或者为 0,表示使用任何空闲端口。

  backlog - 队列的最大长度。即主机可同时被访问的最多人数。



六.网络编程(域名解析)

 1. 当访问主机时,先找的是本地(即C盘的ip映射文件),本地没有再到外面去找。

  在本地找到的话,本地就把地址给浏览器。

 2.配置映射关系的好处:

  1)将要访问的网站配置到hosts文件,则可极大地提高访问速度。因为减少了访问解析的路程。

  如:

  #127.0.0.1 www.163.com

  2)有些收费软件使用时,会自动到网站更新,从而会影响使用,将更新网站的主机名在hosts文件中进行配置。

  则网站就不会再更新了,因为它走的是本地地址,所以更新失败。如:#127.0.0.1  www.myeclipse.com(更新网站举例)l

  3)将恶意网站在hosts文件中进行配置,则会屏蔽恶意网站。

 3.本地连接--->属性---->Internet协议(TCP/IP)--->双击后可配置DNS

 电信通讯默认的是电信的解析服务器.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值