package cn.socket001; //网络编程: /*网络概念 把多台计算机通过物理线路连接起来,就形成了网络。目的在于交换数据和共享信息。 网络通信的三要素 【1】IP地址:唯一标识网络上的每一台计算机。两台计算机之间通信的必备有素 【2】端口号:计算机中应用的标号(代表一个应用程序) 0-1024系统使用或保留端口 常见端口:http:80 stmp: 25 ftp:21 有效端口0-65536,开发者可以的端口是1025-65536之间。一些第三方引用如mysql:3306 oracle:1251。 【3】通信协议:通信的规则 TCP,UDP */ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.UnknownHostException; public class Test01 { public static void main(String[] args) { //InetAddress 表示IP地址。( getLocalHost() 返回本地主机。) try { InetAddress ine=InetAddress.getLocalHost(); System.out.println(ine.toString()); //LATTOP-L0AH1H9U/192.168.6.130 // 获取主机名称 System.out.println(ine.getHostName()); //LAPTTOP-L0AH1H9U System.out.println(ine.getHostAddress()); //获取主机IP地址:192.168.6.130 // 获取局域网指定名称网络主机的IP InetAddress ip1 = InetAddress.getByName("LATTOP-L0AH1H9U"); System.out.println(ip1.toString()); //LATTOP-L0AH1H9U/192.168.6.130 // 在给定IP地址的情况下,获取主机IP信息 byte[] ipArr = {(byte)192,(byte)168,(byte)2,(byte)130}; InetAddress ip2 = InetAddress.getByAddress(ipArr); System.out.println(ip2.getHostName()); //LATTOP-L0AH1H9U // 获取广域网指定名称网络主机的IP InetAddress ip3 = InetAddress.getByName("www.baidu.com"); System.out.println(ip3.toString()); //www.baidu.com/14.215.177.39 InetAddress ip4 = InetAddress.getByName("www.bjsxt.com"); System.out.println(ip4.toString()); //www.bjsxt.com/47.93.94.43 } catch (UnknownHostException e) { e.printStackTrace(); } } }
网络通信模型
IP地址分类
特殊IP
- 0.0.0.0:本机
- 127.0.0.1:本机回环地址,用于本机测试
- 255.255.255.255:当前子网,一般用于向当前子网广播信息
package cn.socket001; /*TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。 * * TCP通信步骤 [1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。 [2] 客户端创建Socket作为通信的Client端 [3] Client端链入Server端后建立可靠的、双向的、持续性的、点对点的通讯连接,即可通信。 */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; //服务器server socket public class Socket01 { public static void main(String[] args) { System.out.println("服务器启动"); //[1]创建ServerSocket作为通信的Server端(服务器) ServerSocket se=null; //创建Socket作为通信的Client端,等待连接客户端 Socket so=null; try { //serversocket的端点 se=new ServerSocket(8000); //等待连接客户端 so=se.accept(); System.out.println(se.getInetAddress().getHostAddress()+"已连接"); //客户端连接成功后向客户端发送信息 OutputStream out=so.getOutputStream(); String a="瓦爱你"; byte [] buf=a.getBytes("utf8"); out.write(buf); //向客户端表示已发送玩的提示信息 so.shutdownOutput(); //接受来自客户端的信息 InputStream in=so.getInputStream(); byte[] buf2=new byte[1024]; int len=in.read(buf2); String st=new String(buf2,0,len,"utf8"); System.out.println(so.getInetAddress().getHostAddress()+st); //向客户端表示已接收完 so.shutdownInput(); //关闭通道 out.close(); in.close(); } catch (IOException e) { //数据流异常 e.printStackTrace(); } } }
package cn.socket001; /*TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。 * * TCP通信步骤 [1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。 [2] 客户端创建Socket作为通信的Client端 [3] Client端链入Server端后建立可靠的、双向的、持续性的、点对点的通讯连接,即可通信。 */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; //客户端Socket public class Socket02 { public static void main(String[] args) { //创建Socket作为通信的Client端 Socket so=null; try { //连接服务器(服务器地址,端口) so=new Socket("192.168.2.130",8000); //接收来自服务器的信息 InputStream in=so.getInputStream(); byte [] buf=new byte[1024]; int len=in.read(buf); String st=new String(buf,0,len,"utf8"); System.out.println(st); //接受完成 so.shutdownInput(); String st2="我也爱你"; byte[] buf2=st2.getBytes("utf8"); //向服务器发送信息 OutputStream out=so.getOutputStream(); out.write(buf2); //向服务器表示已发送完信息的提示信息 so.shutdownOutput(); //关闭通道 out.close(); in.close(); } catch (IOException e) { //数据流异常 e.printStackTrace(); } } }
常见异常
端口被占用
java.net.BindException: Address already in use: JVM_Bind
服务器未启动
java.net.ConnectException: Connection refused: connect
连接超时异常
SocketTimeoutException 当网速很慢时,可能发生连接超时异常。
原文地址:https://www.cnblogs.com/406070989senlin/p/10846376.html
时间: 2024-10-07 07:15:12