网络编程

OSI参考模型有七层:

开放系统互联参考模型-OSI(Open System Interconnection)

OSI参考模型采用了分层的结构化技术,将功能逻辑上划分开来,以使整个结构具有较高的灵活性。OSI参考模型共七层。

应用层(Application Layer)

表示层(Presentation Layer)

会话层(Session Layer)

传输层(Transport Layer)

网络层(Network Layer)

数据链路层(Data Link Layer)

物理层(Physical Layer)

有一句英文可以巧妙记忆OSI七层参考模型:

All people seem to need data process.

(所有的人看起来都需要进行数据处理)

从上到下,每个单词的最前一个字母与每一个层相对应。

还有一句比较雷人的中文:

阿婆死踢你的屁

网络通信要素:IP地址、端口号、传输协议。

在Java Api java.net包。

对垃圾网址的屏蔽方法如下:::

套接字Socket

详见Java api中java.net包,DataGramSocket勇于接受和发送的套接字。

DataGramPacket表示数据报包,用来实现无连接包投递服务,每条报文根据该包中包含的信息从一台机器路由到另一台机器,从一台机器发送到另一台的多个包可能选择不同 路由,也可能按不同的顺序到达,不对包投递做出保证。

步骤:::

Socket类实现客户端套接字,套接字是两台机器间通信的断点。套接字的实际工作由SocketImpl实例执行。。。见javaapi文档。。。。。。

package edu.hnust.net;

import java.net.InetAddress;

import java.net.UnknownHostException;

public class GetNetInfo {

      public static void main(String[] args) throws UnknownHostException {

           //获取ip地址

           String ip = InetAddress.getLocalHost().getHostAddress();

           String localname = InetAddress.getLocalHost().getHostName();

          

           String baiduip = InetAddress.getByName("www.baidu.com").getHostAddress();

           String baiduName = InetAddress.getByName("www.baidu.com").getHostName();

           System.out.println("本机ip地址:"+ip+"本机localname为:"+localname);

           System.out.println("baiduip地址:"+baiduip+"本机localname为:"+baiduName);

      }

}

package edu.hnust.tcp;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {

      /**

       * @param args

       * @throws IOException

       * @throws UnknownHostException

       */

      public static void main(String[] args) throws UnknownHostException, IOException {

           // TCP传输------客户端步骤:     

           //创建tcp客户端socket服务对象,使用的是Socket类

           Socket clientSct = new Socket("192.168.1.101", 10000);

          

           //获取socket输出流

           OutputStream out = clientSct.getOutputStream();

          

           //使用输出流,将数据写出

           out.write("在此写入你想输出的信息!!!服务端哥来了".getBytes());

          

           //使用输入流,将数据读入

           InputStream in = clientSct.getInputStream();

           byte[] buf = new byte[1024];

           int len = in.read(buf);

           String data = new String(buf,0,len);

           System.out.println(data);

          

           //关闭资源

           clientSct.close();//因为out是由Socket获取的,关闭Socket对象即可。

      }

}

package edu.hnust.tcp;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

      /**

       * @param args

       * @throws IOException

       */

      public static void main(String[] args) throws IOException {

           // TCP传输------服务端步骤:     

           /*

           1、创建tcp服务端socket服务对象,使用的是ServerSocket类。

           2、服务端必须为外部提供一个端口,否则客户端无法连接。

           3、获取链接过来的客户端对象。

                            (多个客户端同时连接服务端,客户端之间可以进行通讯,类似qq私聊)一个客户端可以通过

                            服务端获取另外一个客户端的socket对象,与之进行通讯。

           4、通过客户端对象获取socket流读取客户端发送过来的数据。

                            并且显示在该出现的地方,比如控制台,某个窗体。

           5、关闭资源。关客户端,关服务端。

                      (假如服务端设置了最大连接个数,客户端数目超过此数,

                      之后的就不可再连接,避免服务端资源浪费)服务端一般不会关闭。      

           */

           //创建tcp服务端socket服务对象,使用的是ServerSocket类

           ServerSocket serSocket = new ServerSocket(10000);

          

           //获取链接过来的客户端对象,使用方法accept()

           Socket clientSct = serSocket.accept();

           String ip = clientSct.getInetAddress().getHostAddress();

          

           //通过客户端对象获取socket输入流读,取客户端发送过来的数据

           InputStream in = clientSct.getInputStream();

           byte[] buf = new byte[1024];

           int len = in.read(buf);

           String data = new String(buf,0,len);

           System.out.println(ip+"说:"+data);

          

           //使用客户端socket获取输出流,将数据输出

           OutputStream out = clientSct.getOutputStream();

           out.write("在此输入信息!!!客户端哥收到".getBytes());

           //关闭资源,服务端一般不会关闭

           clientSct.close();

           serSocket.close();

      }

}

原文地址:https://www.cnblogs.com/ydpvictor/p/3075757.html