Chapter02 网络(一)

来源:互联网 发布:模糊pid控制算法 编辑:程序博客网 时间:2024/06/18 09:14

建立的简单套接字:

@Testpublic void testSocket() throws UnknownHostException, IOException{Socket socket=new Socket("www.sohu.com",80);//设置超时的时间socket.setSoTimeout(1000);InputStream in=socket.getInputStream();Scanner s=new Scanner(in);while(s.hasNext()){String line=s.nextLine();System.out.println(line);}}
设置套接字的超时时间,如果在时间范围外,进行数据的写入写出的操作,会抛出SocketTimeOutException异常。

实现IP与域名的转化:

@Testpublic void testIP() throws UnknownHostException{//实现IP与域名的转化InetAddress address=InetAddress.getByName("java.sun.com");System.out.println(address);//由于可能存在多个IP返回所有InetAddress[] addresses=InetAddress.getAllByName("java.sun.com");for (InetAddress inetAddress : addresses) {System.out.println();}//本地IP地址System.out.println(InetAddress.getLocalHost());}
实现简单的服务器:

@Testpublic void testServer() throws IOException{//建立套接字ServerSocket serverSocket=new ServerSocket(8080);//不断地监听8080端口Socket socket=serverSocket.accept();//获取输入流InputStream inputStream=socket.getInputStream();//打印出客户端信息Scanner scanner=new  Scanner(inputStream);while (scanner.hasNext()) {String line=scanner.nextLine();System.out.println(line);}//获取输出流    OutputStream outputStream=socket.getOutputStream();    //向客户端发送信息    outputStream.write("这是一条来自服务器的信息".getBytes());    //关闭输出流    outputStream.close();    //关闭套接字    socket.close();}
在命令输入行输入:telnet localhost 8080即可进行操作。

上述程序只允许一个客户端连接,下面的程序允许多个客户端连接:

//多客户端连接@Testpublic void testMultiSocket() throws IOException{//建立套接字ServerSocket serverSocket=new ServerSocket(8080);int i=0;while(true){//不断地监听8080端口Socket socket=serverSocket.accept();//实现多线程,允许多个客户端连接Runnable r=new ThreadEchoHandler(socket);Thread thread=new Thread(r);thread.start();i++;}}
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;public class ThreadEchoHandler implements Runnable {private Socket incoming;public ThreadEchoHandler(Socket socket) {incoming=socket;}@Overridepublic void run() {try{try{InputStream inputStream=incoming.getInputStream();OutputStream outputStream=incoming.getOutputStream();Scanner s=new Scanner(inputStream);PrintWriter writer=new PrintWriter(outputStream);writer.println("Hello! Enter BYE ro exit");boolean b=false;while(!b&&s.hasNext()){String line=s.nextLine();writer.println("echo:"+line);if(line.trim().equalsIgnoreCase("BYE")){b=true;}}}catch(IOException e){e.printStackTrace();}finally{incoming.close();}}catch(IOException e){e.printStackTrace();}}}
套接字的一个功能是:套接字连接的一端可以终止其输出,同时仍旧可以接受来自另一端的数据。

Socket 部分方法:

当连接一个套接字时,当前线程将会被阻塞直到建立连接或者超时为止。

为了中断套接字操作,使用java.nio提供的SocketChannel类,

//该方法测试如果线程发生中断,将会以抛出异常的方式结束
@Test
public void testChannel() throws IOException
{
//获取通道,SocketChannel实现了ReadableByteChannel和WriteableByteChannel接口
SocketChannel channel=SocketChannel.open(new InetSocketAddress("baidu.com", 80));
//使用Scanner类来家获取信息
Scanner scanner=new Scanner(channel);
//将通道转化为输出流
OutputStream outputStream=Channels.newOutputStream(channel);
}




原创粉丝点击