JAVA笔记15__TCP服务端、客户端程序 / ECHO程序 /
/**
* TCP:传输控制协议,采用三方握手的方式,保证准确的连接操作。
* UDP:数据报协议,发送数据报,例如:手机短信或者是QQ消息。
*/ /**
* TCP服务器端程序
*/
public class Main {
public static void main(String[] args) {
try {
ServerSocket s1 = new ServerSocket(57712); //创建一个服务器端socket
System.out.println("服务器已启动,正在等待连接中....");
Socket s = s1.accept(); //等待客户端连接,会阻塞
String info = "Hello World ---\n";
//构造一个字节输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bw.write(info);
bw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* TCP客户端程序
*/
public class ClientDemo {
public static void main(String[] args){
try {
System.out.println("good");
//创建一个客户端的socket对象(IP/主机名,端口号)
Socket s1 = new Socket("172.31.150.27",57712);
System.out.println("与服务器连接成功");
//构造一个字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(s1.getInputStream()));
String info = br.readLine();
System.out.println(info);
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* ECHO服务器端程序
*/
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(12347);
System.out.println("Server has started. is Waiting....");
boolean flag = true;
while(flag){
System.out.println("is waiting for connection....");
Socket s0 = s.accept();
System.out.println("客户端IP:"+s0.getInetAddress().getHostAddress()+" 已连接!");
//获取输入输出流
BufferedReader br = new BufferedReader(
new InputStreamReader(s0.getInputStream()));
PrintStream ps = new PrintStream(
new BufferedOutputStream(s0.getOutputStream()));
boolean bool = true; //循环接收数据
while(bool){
String info = br.readLine();
if(info==null || "bye".equals(info)){
bool = false;
}else{
System.out.println(info);
ps.println("echo:"+info);
ps.flush();
}
}
ps.close();
br.close();
}
}
}
/**
* ECHO客户端程序
*/
public class ClientDemo {
public static void main(String[] args) throws IOException{
//创建一个客户端的socket对象(IP/主机名,端口号)
Socket s0 = new Socket("172.31.150.27",12347);
System.out.println("与服务器连接成功");
Scanner input = new Scanner(System.in);
boolean flag = true;
PrintStream ps = new PrintStream(
new BufferedOutputStream(s0.getOutputStream()));
BufferedReader br = new BufferedReader(
new InputStreamReader(s0.getInputStream()));
while(flag){
System.out.println("请输入:");
String info = input.next();
if("bye".equals(info)){
flag = false;
}else{
ps.println(info);
ps.flush();
System.out.println(br.readLine());
}
}
br.close();
ps.close();
}
}
JAVA笔记15__TCP服务端、客户端程序 / ECHO程序 /的更多相关文章
- WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探
Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事, ...
- Java Tomcat SSL 服务端/客户端双向认证
借花献佛:http://www.blogjava.net/icewee/archive/2012/06/04/379947.html
- JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)
前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...
- gprc-java与golang分别实现服务端,客户端,跨语言通信(一.java实现)
1.在pom中引入 <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty< ...
- 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...
- eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)
eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二) 接上篇博客,本篇博客主要包含两个内容: 4.使用Android studio创建webservice客 ...
- TCP/IP网络编程之基于UDP的服务端/客户端
理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(一)
理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字.TCP是Transmissi ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
随机推荐
- springboot:@ConditionalOnProperty根据不同时机注入不同实现的bean
一.引言 在开发中经常会碰到这样的情形,一个接口会有不同的实现,但在开发中都是基于接口的注入,那么怎么根据不同的需求注入不同的类型就是一个值得考虑的问题.在注入属性时常用的两个注解是@Autowire ...
- 对象继承深入、call_apply、圣杯模式、构造函数和闭包,企业模块化
一个实现加减乘除的插件: 原型其实是在构造函数之上的,构造函数变成实例化函数的时候才会有原型, 原型实际上是构造函数的一个属性 原型无非就是2个字:继承 原型中继承父类所有方法是很不合理的,因为没 ...
- MNIST手写数字识别:卷积神经网络
代码 import torch from torchvision import datasets from torch.utils.data import DataLoader import torc ...
- 修改CentOS ll命令显示时间格式
临时更改显示样式,当会话结束后恢复原来的样式: export TIME_STYLE='+%Y-%m-%d %H:%M:%S' 永久改变显示样式,更改后的效果会保存下来 修改/etc/profile文件 ...
- JAVA-java内存分配
二.java-class的内存分配 三.JAVA string类特别之处 String 通过构造方法创建是在堆内存中, 通过直接赋值对象是在方法区的常量里 四.字符串做拼接 非常耗时和浪费内存的原因 ...
- VMware虚拟机常见问题(针对目前我所学的而言,还会不断更新)
VMware虚拟机常见问题(针对目前我所学的而言,还会不断更新) 自己电脑的telnet Client是否打开 在控制面板->程序->打开或关闭Windows功能 虚拟机的telnet是否 ...
- Python+selenium自动化生成测试报告
批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTest ...
- WPF进阶技巧和实战07--自定义元素01
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...
- heoi2020信号传递
状压dp 我状压学得是真烂..... 考试的时候想了状压,可是一直都是在枚举位置,没有神魔实质性突破.其实这道题的关键瓶颈也在于此,状压压的是号,而不是位置.如果 $i<=j$ 那么贡献为 $j ...
- 编译原理: FIRST(x) FOLLOW(x) SELECT(x)的计算
目录 First计算 Follow计算 Select计算 已知文法G[S]: S→MH|a H→LSo|ε K→dML|ε L→eHf M→K|bLM 判断G是否是LL(1)文法. First计算 F ...