码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程,IP地址,TCP 编程

时间:2019-05-10 20:24:45      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:ext   子网   baidu   0.0.0.0   utf8   网速   指定   pre   cte   

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  当网速很慢时,可能发生连接超时异常。

 

网络编程,IP地址,TCP 编程

标签:ext   子网   baidu   0.0.0.0   utf8   网速   指定   pre   cte   

原文地址:https://www.cnblogs.com/406070989senlin/p/10846376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!