java中网络编程之socket编程(一)--Tcp同步阻塞式
来源:互联网 发布:像拍立得滤镜软件 编辑:程序博客网 时间:2024/05/29 12:15
一、简介
从这起,开始介绍网络编程, 这里介绍以tcp协议方式进行连接的同步阻塞式socket编程。
同步阻塞是指通信开始时,工作线程等待直到连接上为止,数据传输时,也是等待直到获取数据为止。
即是包含两个等待过程,期间就是等待,不做任何事。
二、知识点
1、阻塞与非阻塞
是相对于连接过程是否等待,或者说连接中是否可做其它事。
serverSocket接收socket连接且等待直到连接上为止,即为阻塞。
serverSocket接口连接后,不等待连接上,又去接收新的连接,轮询地处理连接或连接就绪等事件,即为非阻塞。
2、同步与异步
是相对于结果而言的,即是否等待结果返回。等待结果的即是同步,不等待结果的即是异步。
在这里,socket等待直到读取到数据为止,即是同步。
socket不等待读取到数据,而去做别的事,当数据准备好后,会通知socket数据已经准备好了,这就是异步。
3、通信步骤
通常包含两个步骤,即服务连接和数据传输(包含读和写)。
4、端口
通常服务端口不能在1到1023之间,如果端口设置为0,即表示由服务器自动分配任意端口。
三、服务端实例
这里采用主线程接收连接请求,另起线程处理连接的读和写操作。
关键代码:
new ServerSocket(port, maxConnections),创建并开启服务;
server.accept(),接收连接请求;
socket.getInputStream(),连接读入口;
socket.getOutputStream(),连接写入口;
代码实例如下:
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TcpSocketServerMain { public static void main(String[] args) throws Exception { //端口号 int port = 7001; //最大连接数 int maxConnections = 3; //创建ServerSocket,开启服务 ServerSocket server = new ServerSocket(port, maxConnections); //循环接收连接 while (true) { try { Socket socket = server.accept(); System.out.println("receive connection, address:" + socket.getInetAddress() + " port:" + socket.getLocalPort()); //另起线程处理该连接的读写 new DisposeSocketThread(socket).start(); } catch (Exception e) { } } } /** * 处理连接socket的读写 */ static class DisposeSocketThread extends Thread{ private Socket socket; private DisposeSocketThread(Socket socket){ this.socket = socket; } @Override public void run() { try{ PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //循环接收和发送 while (true) { //读取消息 System.out.println("receive msg: " + br.readLine()); //输入消息 System.out.print("send msg:"); BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //发送消息 pw.println(input.readLine()); pw.flush(); } }catch (Exception e){ } } }}
四、客户端实例
这里直接使用主线程进行连接、读、写操作,
关键代码:
new Socket(host, port),创建socket并连接服务器;
dsocket.getInputStream(),连接读入口;
socket.getOutputStream(),连接写入口;
import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class TcpSocketMain { public static void main(String[] args) throws Exception { //连接地址 String host = "127.0.0.1"; //端口号 int port = 7001; //创建socket连接 Socket socket = new Socket(host, port); PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //循环发送和接收 while (true) { try { //输入消息 System.out.print("send msg:"); BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //发送消息 pw.println(input.readLine()); pw.flush(); //接收消息 System.out.println("receive msg: " + br.readLine()); } catch (Exception e) { } } }}
- java中网络编程之socket编程(一)--Tcp同步阻塞式
- Windows网络编程之(一)Socket阻塞模式(TCP和UDP)
- 网络编程之 Socket的模式(一) --- “阻塞/非阻塞” 与 “同步/异步”
- 网络编程之 Socket的模式(一) --- “阻塞/非阻塞” 与 “同步/异步”
- 《聊聊Socket、TCP/IP、HTTP、FTP及网络编程》 / 《聊聊同步、异步、阻塞与非阻塞》
- Windows网络编程之(二)Socket通信非阻塞模式Select(TCP和UDP)
- UNIX网络编程--socket中的同步/异步 阻塞/非阻塞
- UNIX网络编程--socket中的同步/异步 阻塞/非阻塞
- socket网络编程之路 第六篇 -----同步与异步,阻塞与非阻塞的区别
- Java网络编程(一)-Socket编程
- 网络编程一:概述、网络模型、TCP\UDP、Socket套接字、UDP发送和接收、UDP聊、阻塞式方法
- Java网络编程之TCP(一)
- java tcp/ip socket编程(一)
- JAVA TCP/IP Socket 编程(一)
- Java网络编程 - 同步阻塞IO模型
- java网络编程(二)----同步阻塞bio
- 网络编程之Socket ---TCP编程
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- HTML5拖放行为——DataTransfer对象
- SpringCloud Eureka 源码分析
- Kotlin基础学习(2)
- 文章标题
- Chris Richardson 微服务系列 第七篇 重构单体应用到微服务
- java中网络编程之socket编程(一)--Tcp同步阻塞式
- 数据库基本操作和JDBC编程步骤
- POJ
- 数据结构实验之串三:KMP应用
- vue.js的常用指令
- 深入体验JavaWeb开发内幕之Response对象操作实例之通过Response实现重定向和刷新跳转并跳转页面
- Java整理(二)面向对象
- 数据库学习纪要(二十八):MySQL-8-部分数据函数
- 【悬而未决的算法题】marker下来等待解决(随时更新)