java的socket编程简介(4)
2017-12-02 18:55
483 查看
1、Socket是TCP网络通信中的概念。
TCP是面向连接的可靠的字节流的传输
TCP通信模型是典型的客户机-服务器模型
TCP通信的双方使用所谓的Socket进行通信
2、Socket封装了通信一方的IP地址和端口号,是负责通信的组件。实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
3、Java提供的Socket编程模型,主要涉及两个类:
Socket类和ServerSocket类
4、ServerSocket对象代表服务器方的监听者,等待和接受客户端发起的TCP连接,然后返回一个负责与该具体客户端通信的Socket对象。
服务端代码:
支持多客户端的client/server的程序:
前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用 中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上 面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求服务器就会启动一个专门的服务线程来响 应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态等待下一个客户的到来。
TCP是面向连接的可靠的字节流的传输
TCP通信模型是典型的客户机-服务器模型
TCP通信的双方使用所谓的Socket进行通信
2、Socket封装了通信一方的IP地址和端口号,是负责通信的组件。实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
3、Java提供的Socket编程模型,主要涉及两个类:
Socket类和ServerSocket类
4、ServerSocket对象代表服务器方的监听者,等待和接受客户端发起的TCP连接,然后返回一个负责与该具体客户端通信的Socket对象。
服务端代码:
package com.fit.demo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //在服务端创建ServerSocket对象,准备在6666端口监听 ServerSocket server=new ServerSocket(6666); //监听到客户端的请求后,才执行后面的代码 System.out.println("正在监听。。。"); //监听客户端的请求,如果监听到客户端的请求,在服务端创建一个Socket对象与客户端通信 Socket socket=server.accept(); //获取输入流,读取网络中的数据 InputStream ins=socket.getInputStream(); DataInputStream dis=new DataInputStream(ins); String str=dis.readUTF(); System.out.println(str); //获取输出流,向网络中写数据 OutputStream os=socket.getOutputStream(); DataOutputStream das=new DataOutputStream(os); das.writeUTF("你好,客户端!"); //关闭资源 das.flush(); das.close(); os.flush(); os.close(); dis.close(); ins.close(); socket.close(); } }客户端代码:
package com.fit.demo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) throws UnknownHostException, IOException { //创建Socket对象,并向指定的服务端的6666端口发起连接 Socket socket=new Socket("localhost", 6666); //获取输出流,向网络中写数据 OutputStream os=socket.getOutputStream(); DataOutputStream das=new DataOutputStream(os); das.writeUTF("你好,服务器端"); das.flush(); //获取输入流,读取网络中的数据(不能写在close()后面,因为服务已经关闭) InputStream ins=socket.getInputStream(); DataInputStream dis=new DataInputStream(ins); String str=dis.readUTF(); System.out.println(str); //关闭资源 das.close(); os.flush(); os.close(); dis.close(); ins.close(); socket.close(); } }
支持多客户端的client/server的程序:
前面的Client/Server程序只能实现Server和一个客户的对话。在实际应用 中,往往是在服务器上运行一个永久的程序,它可以接收来自其他多个客户端的请求,提供相应的服务。为了实现在服务器方给多个客户提供服务的功能,需要对上 面的程序进行改造,利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求服务器就会启动一个专门的服务线程来响 应该客户的请求,而服务器本身在启动完线程之后马上又进入监听状态等待下一个客户的到来。
相关文章推荐
- 网络编程2之Socket简介和java.net包
- JAVA Socket编程入门简介
- java网络编程基础夯实06-TCP,UDP,HTTP,Socket简介
- java网络socket编程(一)之基础简介
- 编写高性能 Java 数据访问应用程序之 2 :内联方法编程风格简介
- Java网络编程精解之ServerSocket用法详解一2
- java进阶 ------ 基于Socket低层次网络编程
- java基础篇_socket编程_01基础篇
- Java网络编程(二)关于Socket的一些个人想法
- Java网络编程——使用NIO实现非阻塞Socket通信
- JAVA Socket编程学习6--NIOTCP两个线程监听两个端口
- java网络编程(一) socket方式TCP和Datagram的UDP
- Java Socket编程和UDP编程
- java socket编程实例代码讲解
- java 网络编程之Socket详解
- Java:Java socket编程时读取输入流时挂起问题
- Java网络编程之BIO(Socket)-yellowcong
- Java网络编程,Socket,ServerSocket使用,TCP,UDP的异同
- java -socket编程三:几种常用的服务器模型
- java socket编程三:并发服务器