本节主要介绍 net包,因为涉及到网络编程所以如果对网络基础不是很了解的可以先去看看网络基础
比如 OSI模型,IP分类,TCP/IP协议,UDP协议 等等
在此不介绍网络基础 我们直接看net包
当我查看API我们会发现在NET包里有许多类,而对我们来说最常用的就是ServerSocket ,Socket 类了
1.Socket 的介绍:
此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器之间的通信端点。
常用构造方法
Socket(String host, int port)
创建一个流套接字并将其连接到指定主机上的指定端口号。
当然这个类还有很多方法 在这里我们不一一介绍
2.ServerSocket 的介绍
此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
常用的构造方法
ServerSocket(int port)
创建绑定到特定端口的服务器套接字
port为一个端口 在这里我们可以自己定义范围是1-65536
ServerSocket ,Socket 通常是一块用的,他们分别是用来实现双向连接的client端(Socket )和server端(ServerSocket )的
他们之间是通过端口联系的
下面我们用一个简单的例子讲述
例:一个简单的客户端与服务端的通讯
既然是建立客户端和服务端的通讯那么我们要建立这两个端
首先建立服务端
定义一个类 server
- import java.io.IOException;
- import java.net.*;
- public class server {
- public static void main(String[] args) {
- try {
- ServerSocket ss = new ServerSocket(8888);// 新建ServerSocket类并设置端口(端口自定义1-65536范围内)
- while (true){
- Socket s = ss.accept(); //侦听并接受到此连接。
- System.out.println("Connected");//如果连接成功 输出Connected
- }
- }catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- //server类是服务端是用来接受客户端
然后定义个客户端类
- import java.io.IOException;
- import java.net.*;
- public class Client1 {
- public static void main(String[] args) {
- try {
- Socket s = new Socket("127.0.0.1",8888);// 创建一个流套接字并将其连接到指定主机上的指定端口号
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- // Client1是客户端 是用来与服务器端进行通讯
- //注意:客户端与服务端的端口要一致
这样 客户端和服务端就已经建立好了 接下来就要测试连接了
注意 首先要先运行服务端再运行服务端
我们运行后会发现 客户端那边打印出了Connected这句话 这说明连接上了
但我们会发现这种通讯太简单,只能实行一边发送信息根本不符合现在的通讯能力
下面在介绍一个双方既能发送又能接收信息的例子
例:通讯
在这里我们就要用到IO那节了 用流来通讯
定义服务端类 Socket1
- import java.io.*;
- import java.net.*;
- public class Socket1 {
- public static void main(String[] args) {
- try {
- ServerSocket ss = new ServerSocket (6666);
- while (true){
- Socket s = ss.accept();
- DataInputStream dis = new DataInputStream (s.getInputStream());
- DataOutputStream dos = new DataOutputStream(s.getOutputStream());
- dos.writeUTF("connected");
- System.out.println(dis.readUTF());
- dis.close();
- s.close();
- dos.flush();
- dos.close();
- }
- }catch (IOException e) {
- }
- }
- }
定义客户端类 Client
- import java.io.*;
- import java.net.*;
- public class Client {
- public static void main(String[] agrs){
- try {
- Socket s = new Socket("127.0.0.1",6666);
- DataOutputStream dos = new DataOutputStream(s.getOutputStream());
- DataInputStream dis = new DataInputStream(s.getInputStream());
- System.out.println(dis.readUTF());
- dos.writeUTF("A client ");
- dos.flush();
- dos.close();
- dos.close();
- s.close();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
但我们运行此程序后我们会发现 客户端和服务端都收到了一句话,这说明双放都能通讯了,这里主使用了输入,输出流
具体如何实现大家看代码吧
当然这样的通讯也显得过于简单,不适合现在的通讯,但是在这里知识点基本也讲完了,有了上面的基础加上以前的只是如果想写一个好的通讯自己可以发挥自己的能力来写。