黑马程序员——网络编程总结(二)

------- android培训java培训、期待与您交流! ----------


为了可以让多个客户端同时并发访问服务端,那么服务端最好就是讲每个客户端
封装到一个单独的线程中,这样就可以同时处理多个客户端请求。


定义线程,只要明确了每个客户端要在服务端执行的代码即可,并将该代码存入run方法中。


客户端并发登陆练习
需求:
客户端通过键盘录入用户名,服务端对这个用户名进行校验。
如果用户名存在,在服务端显示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.0.103",10004);


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


		PrintWriter out=new PrintWriter(s.getOutputStream(),true);//将读到的数据发送出去


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


		for(int x=0;x<3;x++)
		{
			String line=bur.readLine();
			if(line==null)
				break;


			out.println(line);


			String info=burIn.readLine();
			System.out.println("info"+info);
			if(info.contains("欢迎"))
				break;


		}


		bur.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 burIn=
					new BufferedReader(new InputStreamReader(s.getInputStream()));


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


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


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


				String line=null;


				boolean flag=false;//定义判断标识
				while((line=bur.readLine())!=null);
				{
					if(line.equals(name))
					{
						flag=true;
						break;
					}
				}


				if(flag)
				{
					System.out.println(name+"已登录");
					out.println(name+"欢迎光临");
				}
				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(10004);	


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


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

URL
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或者目录,也可以是对更为复杂的对象的引用,
例如对数据库或搜索引擎的查询。

演示:
import java.net.*;


class UrlTest
{
	public static void main(String[] args)
	{
		URL url=new URL("http://192.168.1.104:8080/myweb/test.html");


		System.out.println("getProtocol():"+url.getProtocol());//获取此URL的协议名称
		System.out.println("getHost():"+url.getHost());//获取此URL的主机名(如果适用)
		System.out.println("getPort():"+url.getPort());//获取此URL的端口号
		System.out.println("getPath():"+url.getPath());//获取此URL的路径部分
		System.out.println("getFile():"+urlgetFile().);//获取此URL的文件名
		System.out.println("getQuery():"+url.getQuery());//获取此URL的查询部
	}
}


/*
注:一般输入网址,是不带端口号的,此时可进行获取,通过获取网址返回的port,若port为-1,则分配一个默认的80端口,如
        int port = getPort();
        if(port == -1)
              port = 80;
*/




URLConnection
方法:
        1,URLConnection openConnection();//用URL调用此方法,返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接
        2,InputStream getInputStream();//获取输入流
        3,OutputStream getOutputStream();//获取输出流


域名解析










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值