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);
}
阅读全文
0 0
- Chapter02 网络(一)
- Chapter02 初始Hadoop一
- chapter02
- Chapter02 网络(二) 获取Web数据
- Chapter02 Unicode
- Practical_RichFaces要点Chapter02
- chapter02 数据库管理工具
- 机器学习入门 chapter02
- Socket Kernel Source Chapter02 sys_socketcall
- Chapter02 列表和元组
- Chapter02 控制结构和函数
- jQuery学习--Chapter02小结(jQuery选择器)
- 【学习笔记】Get Started with MATLAB-Chapter02
- Git学习笔记 chapter02--版本回退
- 正则表达式学习笔记 Chapter02--匹配字符
- 网络编程一:网络请求
- 网络篇一---网络基础
- java--chapter02--判断数是否在数组中
- OpenVR API
- Unity3D
- Easyui 数据网格详细视图(DataGrid DetailView)
- 机器学习实战:朴素贝叶斯(Naive Bayes)
- AndroidManifest.xml文件解析
- Chapter02 网络(一)
- 51Nod-球与切换器-1293
- poj2352 Stars 线段树单点更新
- 详解C#委托与回调函数
- Java垃圾回收原理
- 用户及组管理
- 二叉树的遍历
- Ascll码表中的数据对应(可用在SQL中)
- OpenResty--改写反向代理页面内容