Chapter02 网络(一)
程序员文章站
2022-03-22 23:15:09
...
建立的简单套接字:
@Test
public 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与域名的转化:
@Test
public 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());
}
实现简单的服务器:
@Test
public 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即可进行操作。
上述程序只允许一个客户端连接,下面的程序允许多个客户端连接:
//多客户端连接
@Test
public 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;
}
@Override
public 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);
}
上一篇: 附近小程序几公里范围内可以搜到
下一篇: 怎么在小程序中引入外部字体