【详细注释】Java->Socket 服务器与客户端的半双工通讯。拥有详细注释,完美诠释。
来源:互联网 发布:淘宝v2是什么意思 编辑:程序博客网 时间:2024/06/06 18:35
(客户端类)class Client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
//创建套接字;(作为客户端的水管头)连接服务器;
Socket s = new Socket("127.0.0.1", 50000);
Scanner sca = new Scanner(System.in);
//转换专用,将捕获的字节流转换为字符流(字节可以打包转字符,字符不能拆散转字节,可用强制转换失精度来理解)
OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
//创建自符流对象来存取转换的字符流(容器)
PrintWriter pw = new PrintWriter(os);
//同上,转换专用,将要输入的字节流转换为字符流(扔进水管前打个包)
InputStreamReader is = new InputStreamReader(s.getInputStream());
//创建字符流,存放字符流
BufferedReader br = new BufferedReader(is);
//持续循环
while(true){
//创建 String 存放 br 读到的值
String str2 = br.readLine();
System.out.println("收到:"+str2);
System.out.print("(客户端)请输入内容:");
String str = sca.nextLine();
//写入文件(将要发送的 str 扔进水管)
pw.println(str);
//由于发送的是字符流,需要推动缓存(放入水管的是打包的东西,需要推一把)
pw.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(控制台类)class ServerMain:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerMain {
public static void main(String[] args) {
try {
//创建 ss 服务器版的套接字(服务器比较高端,只要端口号就行)
ServerSocket ss = new ServerSocket(50000);
System.out.println("服务台上线");
String str0 = "我是服务器";
//创建 s 套接字,并在端口监听(为服务器干活的套接字,也高端,直接接通看到的管道就行)
Socket s = ss.accept();
System.out.println(s.getInetAddress()+"上线了");
Scanner sca = new Scanner(System.in);
//读取用的
//转换专用
InputStreamReader isr = new InputStreamReader(s.getInputStream());
//存放
BufferedReader br1 = new BufferedReader(isr);
//转换专用
OutputStreamWriter os = new OutputStreamWriter(s.getOutputStream());
//存放
PrintWriter pw = new PrintWriter(os,true);
while(true){
System.out.print("(服务器)请输入内容:");
//阻塞式进程,可以防止进入死循环
String str2 = sca.nextLine();
//写入
pw.println(str2);
//释放缓存
pw.flush();
String str1 = br1.readLine();
System.out.println("收到:"+str1);
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
- 【详细注释】Java->Socket 服务器与客户端的半双工通讯。拥有详细注释,完美诠释。
- Socket 传输文件 详细注释
- libevent_server 服务器程序详细注释
- 可视化日历【Java,有详细的注释】
- Netty实例-简单的服务端-客户端实现,注释详细
- javadoc-Java注释详细介绍
- 思路超简单的Android Socket 通信 Demo 注释详细
- socket select 模型(详细注释版本)
- WAKEUP.C的详细注释
- ADDSYNTH.C的详细注释
- camshiftdemo.cpp的详细注释
- Hibernate的注释开发(详细)
- Android 手势锁的实现 与详细的代码注释
- Java Websocket实例【服务端与客户端实现全双工通讯】
- <Example_MarkerBasedAR>中Marker.cpp的源码与详细中文注释
- 用java写的俄罗斯方块,并有详细的注释.
- java文件下载(有非常详细的注释).
- UDP传输的java代码(带详细注释)
- 喂狗机制 Software Dog
- 分区表(二)
- SpringMVC拦截器(资源和权限管理)
- 阿里云OSS(对象存储)的个人见解及使用方法
- php命名空间
- 【详细注释】Java->Socket 服务器与客户端的半双工通讯。拥有详细注释,完美诠释。
- FFmpeg源码剖析-通用:ffmpeg_parse_options()
- springMVC的概念及处理流程
- Ext submit时报错 Failed to execute 'appendChild' on 'Node': The new child element is null.
- outputdebugstring函数的封装
- Java:自定义类做key值,需注意什么
- 视频质量评价各种数值---十八个客观测试的方法对比
- _finddata_t结构体用法
- 【备忘】徐老师hadoop hbase zookeeper spark kafka大数据视频教程