网络编程
来源:互联网 发布:vmware mac os 10.12 编辑:程序博客网 时间:2024/06/02 04:07
网络编程之Soctet基础
积少成多,全靠自觉
注:我也是一个小白,在IT的路上我们一起向前进步。
说明:最近毕业设计需要做一个聊天软件,很需要复习下java网络编程中的Socket知识,由此,写下学习记录,方便自己,方便他人。
Socket类
- Socket是Java网络应用程序的一个基本的构造模块,它实现了程序之间的双向通信。
Socket是一个通信端点,当一个Socket连接建立以后,用户就可以从该Socket类的对象中获取输入输出流。
Socket类的构造方法有下面几种形式:
- 1.Sicket(InetAddress address, int port)
- 2.Sicket(InetAddress address, int port,InetAddress localAddr,int localPort)
- 3.Sicket(String host, int port)
- 4.Sicket(String host,InetAddress localAddr, int localPort)
- 参数说明:
- address:主机地址
- Host:主机地址
- localAddress:本机地址
- localPort:本地端口
- port:主机监听端口
Socket类中的一些常用方法
- void close() //关闭Socket
- InetAddress getInetAddress() //获取当前连接的Internet地址
- InputStream getInputStream() //获取该Socket的输入流
- InetAddress getLocalAddress() //获取本地地址
- int getLocalPort() //获取本地端口号
- OutputStream getOutputStream() //获取该Socket的输出流
- int getPort() //获取远地端口号
- int getSoLinger() //获取连接关闭后的发送数据延迟时间
- int getSoTimeout() //获取读数据时的最长等待时间
- void setSoLinger(Boolean on, int linger) //设置连接关闭后的发送数据延迟时间
- void setSoTimeout(int timeout) //设置读数据时的最长等待时间
- void shutdownInput() //关闭输入流
- void shutdownOutput() //关闭输出流
上边Socket的常用方法(用到的时候再查询就好)
- 所谓socket通常也称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求
- ServerSocket和Socket类位于java.net包中
- ServerSocket:用户服务器端
- Socket:建立网络连接时使用
在连接成功后,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
服务器
- 使用ServerSocket监听指定的端口,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
- 客户端
- 使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
说了这么多理论,不如敲一遍代码测试一下
- Client代码:
public class Client { public static void main(String[] args) throws UnknownHostException, IOException { // 向本机的5525端口发出客户请求 (InetAddress.getLocalHost:获取本地主机名) //创建一个流套接字,并将其与指定的IP地址中的指定端口号连接起来。 Socket socket = new Socket(InetAddress.getLocalHost(), 5525); // 由Socket对象得到输入流,并构造相应的BufferReader对象 BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 由Socket对象得到输出流,并构造PrintWriter对象 PrintWriter os = new PrintWriter(socket.getOutputStream()); // 由系统标准输入设备构造BufferedReader对象 BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); while (true) { String str = sin.readLine();// 从系统标准输入读入一字符串 os.println(str); os.flush(); // 刷新输出流,使Server马上收到该字符串 String s = is.readLine(); System.out.println("Server : " + s);// 在标准输出上打印从Server读入的字符串 if (str.equals("end")) { break; } } is.close();// 关闭Socket输入流 os.close();// 关闭Socket输出流 socket.close();// 关闭Socket }}
- Server代码:
public class MyServer { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(5525);// 创建一个ServerSocket在端口5525监听客户请求 Socket client = server.accept();// 使用accept()阻塞等待客户请求 BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));//获取客户端发送的流 PrintWriter os = new PrintWriter(client.getOutputStream()); BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); while (true) { String str = is.readLine(); System.out.println("Client : " + str);// 在标准输出上打印从Client读入的字符串 os.println(sin.readLine()); os.flush();// 刷新输出流,使Client马上收到该字符串 if (str.equals("end")) { break; } } is.close(); os.close(); client.close(); server.close(); }}
test步骤:
- 1.run Server
- 2.run Client
- 3.如果run后都没有报错,那说明客户端和服务器连接成功
- 4.开始会话
Client/Server会话示例:
- Client
- Server:
0 0
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- automake,autoconf使用详解
- android编译错误,找不到命令
- 最详细的 Android Toolbar 开发实践总结
- 汉字到底占几个字节丨C
- 单例设计模式以及衍生的多例设计模式
- 网络编程
- 生成项目路径问题
- 使用Burp手机抓HTTPS网络流量包
- 判断多边形与多边形是否相交的方法,代码来自于OpenLayers。
- opencv codebook背景减除
- Source Insight 3.X 使用记录
- MySql
- 游戏开发完要申请软件著作权,那么怎么写软件设计和使用说明呢?给出模板目录
- 有关C语言:命令行参数