黑马程序员_网络程序设计

来源:互联网 发布:安卓虚拟内存软件 编辑:程序博客网 时间:2024/04/27 17:58
 ------- android培训java培训、期待与您交流! ----------

网络程序设计是java的重要组成部分,其中包括socket,DatagramSocket,DatagramPacket编程等。java网络编程分为需要连接的TCP编程和无连接的UDP编程。在java中Socket是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的实现网络上的数据传递。这个对象有两个特殊方法getInputStream(), getOutputStream() .Socket包括两种操作方式:面向连接的和面向无连接的。

      在java中面向操作类有两种形式:分别是客户端和服务器,首先讨论下使用无连接的UdP,在发送端用键盘输入字符发送到接受端,接受端打印接收到的数据和IP,端口程序如下:

import java.net.*;
import java.io.*;
class UdpSend
{
 public static void main(String[] args)throws Exception
{
 DatagramSocket ds=new DatagramSocket();
 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 String line=null;
 while((line=br.readLine())!=null)
 {
  if("over".equals(line))
  break;
  byte[] buf=line.getBytes();
  DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10001);
  ds.send(dp);
  }
 


ds.close();
}
}
 class UdpRece
{
 public static void main(String[] args)throws Exception
{
 DatagramSocket ds=new DatagramSocket(10001);
 while(true)
 {
 byte[] buf=new byte[1024];
 DatagramPacket dp=new DatagramPacket(buf,buf.length);
 ds.receive(dp);
 
 String ip=dp.getAddress().getHostAddress();
 String data=new String(dp.getData(),0,dp.getLength());
 int port=dp.getPort();
 System.out.println(ip+"::"+data+"::"+port);

}
 }
}

关于面向连接的TCP编程 实例客户登录,该实例要完成:客户端输入用户名,发送到服务端,服务端校验用户名是否存在,存在就打印某用户已登录,并向客户端发送某某用户欢迎光临,如不存在该用户就打印某某尝试登录,向客户端发送某某用户名不存在。源程序如下:

import java.net.*;
import java.io.*;
class LoginClient
{
 public static void main(String[] args)throws Exception
{
  Socket s=new Socket("127.0.0.1",10010);
  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(10010);
 while(true)
 {
  Socket s=ss.accept();
  new Thread(new UserThread(s)).start();
  }
 }
}

这里面实现了多线程:UserThread是实现了Runnable,使服务器可以同时接受多个客户端的请求,另外还用到了IO编程。

 

 

  ------- android培训java培训、期待与您交流! ----------
原创粉丝点击