博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于TCP协议的网络编程之Socket(套接字)
阅读量:4161 次
发布时间:2019-05-26

本文共 2742 字,大约阅读时间需要 9 分钟。

文章目录

一.什么是Socket?

  • 通信链路的端点就被称为套接字,英名文为’Socket’
  • 是提供给应用程序的接口,类似我们日常生活中的快递点
  • Socket的底层机制比较复杂,java平台提供了一些简单的API,可更简单有效的使用Socket开发而无需了解底层机制
  • 所在包为java.net包中

二.Socket通信模型

  • 1.基于TCP协议的Socket网络通信–>用来实现双向安全连接网络通信
  • 2.Socket通信模型
  • 进行网络通信时Socket需要借助数据流来完成数据的传递工作,如下:
    数据流传递

三.Socket编程步骤

  • 建立连接–>网络编程模型:客户端/服务器
  • 打开Socket关联的输入输出流
  • 数据流中读写信息
  • 关闭所有的数据流和Socket

客户端向服务端提交请求的交互过程

  • 1.Server端开放端口: ServerSocket ss=new ServerSocket(6000);
  • 2.Server端监听端口: Socket s=s = ss.accept();
  • 3.client端连接server端端口: Socket s = new Socket("127.0.0.1",6000);
  • 4.client端获取输出流–>在输出流中写入数据: OutputStream os = s.getOutputStream();
  • 5.server端监听到client端的数据传输,server端获取输入流–>读取输入流的数据: InputStream is = s.getInputStream();
  • 6.依次关闭client端和server的流和socket对象

四.demo:实现一个客户发出请求,服务端向客户端响应的交互过程

1)服务器端:

package net;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/** * @author sunyong * @date 2020/06/21 * @description * 服务端 */public class TestServer {
public static void main(String[] args)throws Exception {
while (true) {
//1)开放端口 ServerSocket ss = new ServerSocket(6000); System.out.println("服务器启动,等待客户端!"); //2)监听端口 Socket s = ss.accept(); //3)获取输入流读取数据 InputStream is = s.getInputStream(); byte[] b = new byte[is.available()]; is.read(b); char[] c = new char[b.length]; for (int i = 0; i < b.length; i++) {
c[i] = (char) b[i]; } String rst = String.valueOf(c); System.out.println(rst); String a = "I am server"; //4)获取输出流给与响应 OutputStream os = s.getOutputStream(); os.write(a.getBytes()); //关闭输入输出流和socket os.close(); is.close(); s.close(); ss.close(); } }}

2)客户端:

package net;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/** * @author sunyong * @date 2020/06/21 * @description * 客户端 */public class TestClient {    public static void main(String[] args) throws Exception {        //1)通过服务器的ip和端口连接服务端        Socket s = new Socket("127.0.0.1",6000);//连接本机 localhost或者127.0.0.1(本机回环地址)        //2)获取输出流写数据        OutputStream os = s.getOutputStream();        String str ="hello,I am client No.1 for test";        os.write(str.getBytes());        //3)获取输入流读数据        InputStream is = s.getInputStream();        int temp;        StringBuffer sb = new StringBuffer();        while ((temp=is.read())!=-1){            sb.append((char)temp);        }        System.out.println(sb.toString());        //4)关闭流和socket        is.close();        os.close();        s.close();    }}

五.交互效果如下:

  • 1.服务器端:
    在这里插入图片描述
  • 2.客户端:
    在这里插入图片描述

转载地址:http://ndjxi.baihongyu.com/

你可能感兴趣的文章
ubuntu unzip解压时提示错误 解决方法
查看>>
sprintf函数的说明
查看>>
BOOST_TYPEOF和BOOST_AUTO 作用
查看>>
随机森林概述
查看>>
2011十大战略技术
查看>>
大学应该学的软件知识
查看>>
腾讯与360战争背后的云计算阴影
查看>>
腾讯看了会沉默,360看了会流泪
查看>>
李开复:移动互联网机会最大 微博会现最大赢家
查看>>
2006年的IT十大战略技术
查看>>
操作系统介绍
查看>>
Desktop Linux: The Dream Is Dead
查看>>
我的9年IT路
查看>>
任正非:让用户像用电一样享受云计算
查看>>
学习技术的几个境界
查看>>
计算机世界:免费的代价
查看>>
方兴东:中国网站十年
查看>>
2010年微软和谷歌十大战场:从桌面到浏览器
查看>>
服务器虚拟化的未来之路
查看>>
写给我们这些浮躁的系统工程师
查看>>