Java的Socket编程

socket编程一般指的就是网络编程,常见的服务端和客户机都是必不可少的,今天小千就来给大家介绍一下socket编程中常见的概念问题。

一、常见传输协议

  1、tcp协议

  TCP (Transmission Control Protocol,传输控制协议):“面向连接 ”,可靠的、基于字节流的运输层(Transport layer)通信协议 。

  面向连接服务要经过三个阶段:数据传数前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。面向连接服务,可确保数据传送的次序和传输的可靠性。

  2、udp协议

  UDP(User Datagram Protocol ,用户数据包协议):“面向非连接”,在正式通信前不必与对方先建立连接,不管对方状态就直接发送。

  无连接服务的特点是:无连接服务只有传输数据阶段。消除了除数据通信外的其它开销。

  3、IP协议

  IP( Internet Protocol ):计算机网络相互连接进行通信而设计的协议。互联网地址或Internet地址。是用来唯一标识互联网上计算机的逻辑地址。

在这里插入图片描述

二、URL实现网页静态化

  类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。利用他可以获得网络资源,读取WWW服务器上的数据。

  这里我们将读取到的数据转换为流,然后保存到本地(类似网页静态化)。

在这里插入图片描述

三、TCP套接字

  为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。

  Socket可以看作是通信连接两端的收发器。

在这里插入图片描述

  套接字,Socket是网络上运行的程序之间双向通信链路的端点。Socket所要完成的通信就是基于连接的通信,建立连接所需的程序分别运行在客户端和服务器端。套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入/输出流连接在一起。

  2、TCP套接字

  在Java中,套接字(通信端点)被抽象为类,我们只需要创建Socket类的对象,就可以使用套接字。Socket中有输入输出流对象,同时能实现服务器之间的数据传输。

  3、Socket部分

  通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

  一个程序(Program B )将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket(Program A)中,使这段信息能传送到其他程序中。

  Socket工作步骤:

  a、建立连接

  在服务器端通过指定一个用来等待的连接的端口号创建一个 ServerSocket实例.

  在客户端通过主机和端口号创建一个 socket实例,连到服务器上.

  ServerSocket类的accept方法使服务器处于阻塞状态,等待用户请求

  b、数据通信

  建立socket连接后,还应该建立输入输出数据流,客户程序可以向Socket写入请求,服务器程序处理请求,并把处理结果通过Socket返回给客户端,完成通过虚拟通道的数据通信;

  c、拆除连接

  通信结束,将所建立的虚拟连接全部拆除。

本文来自千锋教育,转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server extends ServerSocket { private static ArrayList User_List = new ArrayList(); private static ArrayList Threader = new ArrayList(); private static LinkedList Message_Array = new LinkedList(); private static int Thread_Counter = 0; private static boolean isClear = true; protected static final int SERVER_PORT = 10000; protected FileOutputStream LOG_FILE = new FileOutputStream( "d:/connect.log", true); public Server() throws FileNotFoundException, IOException { super(SERVER_PORT); // append connection log // Calendar now = Calendar.getInstance(); // String str = "[" + now.getTime().toString() + // "] Accepted a connection"; // byte[] tmp = str.getBytes(); // LOG_FILE.write(tmp); try { Socket socket = accept(); while (true) { new ServerReaderThread(socket); new ServerWriterThread(socket); } } finally { close(); } } public static void main(String[] args) throws IOException { new Server(); } // --- CreateServerThread class ServerReaderThread extends Thread { private Socket client; private BufferedReader in; private PrintWriter out; private String Username; public ServerReaderThread(Socket s) throws IOException { client = s; in = new BufferedReader(new InputStreamReader(client .getInputStream())); out = new PrintWriter(client.getOutputStream(), true); start(); } public void run() { try { int flag = 0; Thread_Counter++; String line = in.readLine(); while (!line.equals("bye")) { out.println(line); line = in.readLine(); } out.println("--- See you, bye! ---"); // System.out.println("--- See you, bye! ---"); client.close(); } catch (IOException e) { } finally { try { client.close(); } catch (IOException e) { } Thread_Counter--; } } } // --- CreateServerThread class ServerWriterThread extends Thread { priva

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值