首页 > 学院 > 开发设计 > 正文

网络基础

2019-11-11 05:05:16
字体:
来源:转载
供稿:网友

下面介绍的内容仅适用于TCP(传输控制协议)网络协议。java平台另外还支持所谓的UDP(用户数据报协议)协议,该协议可以用于发送数据包(也称为数据报),它所需付出的开销要比TCP少得多。UDP有一个重要的缺点:数据包无需按照顺序进行传递,它们甚至可能在传输过程中全部丢失。UDP要求数据包的接受者对它们进行排序,并请求发送者重新发送那些丢失的数据包。UDP比较适合于那些可以忍受数据包丢失的应用,例如用于音频流和视频流的传输,或者用于连续测量的应用领域。

SocketSocket(String host, int port)构建一个套接字,用来连接给定的主机和端口。InputStream getInputStream()OutputStream getOutputStream()获取可以从套接字中读取数据的流,以及可以向套接字写出数据的流。套接字超时

从套接字读取信息时,在可以访问数据之前,读操作将会被阻塞。如果此时主机不可达,那么应用将要等待很长的时间,并且因为受底层操作系统的限制而最终会导致超时。对于不同的应用,应该确定合理的超时值。然后调用setSoTimeout方法设置这个超时值(单位:毫秒)。如果已经为套接字设置了超时值,并且之后的读操作和写操作在没有完成之前就超过了时间限制,那么这些操作就会抛出SocketTimeoutException异常。Socket(String host,int port)会一直无限期地阻塞下去,直到建立了到达主机的初始连接为止。

Socket a  = new Socket();a.connect(new InetSocketAddress("",80), 10);这样就解决了前面一直阻塞的问题
Socket()创建一个还未被连接的套接字。void connect(SocketAddress address) 将该套接字连接到给定的地址。void connect(SocketAddress address, int timeoutInMilliseconds) 将套接字连接到给定的地址。如果在给定的时间内没有响应,则返回。void setSoTimeout(int timeoutInMilliseconds) 设置该套接字上读请求的阻塞时间。如果超出给定时间,则抛出一个InterruptedIOException异常。boolean isConnected() 如果该套接字已被连接,则返回true。boolean isClosed() 如果套接字已经被关闭,则返回true。因特网地址

因特网地址是指用一串数字表示的主机地址,它由4个字节组成, ipv6规定为16个字节,比如132.163.4.102。通常,不用过多考虑因特网地址的问题。但是,如果需要在主机名和因特网地址之间进行转换时,可以使用InetAddress类。静态的getByName方法可以返回代表某个主机的InetAddress对象。

InetAddress ia = InetAddress.getByName("localhost");然后,可以使用getAddress方法来访问这些字节。
System.out.PRintln(ia.getHostName());byte[]  b = ia.getAddress();可以通过调用getAllByName方法来获得所有主机
InetAddress[] ia = InetAddress.getAllByName("localhost");可以使用静态的getLocalHost方法来得到本地主机的地址
InetAddress a =InetAddress.getLocalHost();
static InetAddress getByName(String host)static InetAddress[] getAllByName(String host)为给定的主机名,创建一个InetAddress对象,或者一个包含了该主机名所对应的所有因特网地址的数组。static InetAddress getLocalHost()为本地主机创建一个InetAddress对象。byte[] getAddress()返回一个包含数字型地址的字节数组。String getHostAddress()返回一个由十进制数组成的字符串,各数字间用圆点符号隔开,例如, “132.163.4.102”。String getHostName()返回主机名实现服务器

使用ServerSocket类用于建立一个套接字。

ServerSocket ss = new ServerSocket(int port);
Socket s = ss.accept();然后创建输入输出流读取内容。

ServerSocket(int port)创建一个监控端口的服务器套接字。Socket accept()等待连接。该方法阻塞(即,使之空闲)当前线程直到建立连接为止。该方法返回一个套接字对象,程序可以通过这个对象与连接中的客户端进行通信。void close()关闭服务器套接字。
客户端public static void main(String[] args) throws UnknownHostException, IOException {		Socket a  = new Socket("127.0.0.1",8189);		InputStream is = a.getInputStream();		OutputStream os = a.getOutputStream();		PrintWriter pw = new PrintWriter(os);		BufferedReader bf = new BufferedReader(new InputStreamReader(is));		Scanner scanner = new Scanner(System.in);		String s;		while((s=bf.readLine())!=null){			System.out.println(s);			pw.println(scanner.nextLine());			pw.flush();		}
服务器ServerSocket ss = new ServerSocket(8189);		Socket s = ss.accept();		InputStream is = s.getInputStream();		OutputStream os = s.getOutputStream();		PrintWriter pw = new PrintWriter(os);		BufferedReader bf = new BufferedReader(new InputStreamReader(is));		pw.println("hello,enter bye to close");		pw.flush();		boolean flag=true;		String input;		while((input=bf.readLine())!=null&& flag){			pw.println(input);			if(input.equals("bye")){				flag=false;			}			pw.flush();		}		s.close();


上一篇:oracle权限

下一篇:UNIX下的通信

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表