网络编程
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();
}
}