【java】网络socket编程简单示例
package 网络编程; import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket; public class TestServerSocket {
public static void main(String[] args) throws IOException {
ServerSocket server=new ServerSocket(9999);
System.out.println("正在连接中……");
Socket client=server.accept();
PrintStream out=new PrintStream(client.getOutputStream());
out.println("北京欢迎你。");
out.close();
client.close();
server.close();
}
}
Server
package 网络编程; import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; public class TestSocket {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client=new Socket("localhost",9999);
Scanner scan=new Scanner(client.getInputStream());
scan.useDelimiter("\n");
if(scan.hasNext())
System.out.println("响应数据:"+scan.next());
scan.close();
client.close();
}
}
Client
echo模型:
package 网络编程; import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; public class TestEchoServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
Socket client = server.accept();
Scanner scan = new Scanner(client.getInputStream());// 接收客户端输入
PrintStream out = new PrintStream(client.getOutputStream());// 输出到客户端
boolean flag = true;
String tmp = "";
while (flag) {
if (scan.hasNext()) {
tmp = scan.next().trim();
if (tmp.equalsIgnoreCase("bye")) {
out.println("再见!");
flag = false;
} else {
out.println("Echo:" + tmp);
}
}
}
out.close();
scan.close();
client.close();
server.close();
}
}
EchoServer
package 网络编程; import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; public class TestEchoClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client=new Socket("localhost",9999);
Scanner scan=new Scanner(System.in);//键盘输入
Scanner in=new Scanner(client.getInputStream());//服务端输入
PrintStream out=new PrintStream(client.getOutputStream());//输出到服务端
scan.useDelimiter("\n");
// in.useDelimiter("\n");
boolean flag=true;
String msg="";
while(flag){
if(scan.hasNext()){//等待用户从键盘输入
msg=scan.next().trim();
out.println(msg);//信息转给服务端
if(msg.equalsIgnoreCase("bye"))
flag=false;
else
System.out.println(in.next());//打印服务端响应的信息
}
}
out.close();
in.close();
scan.close();
client.close();
}
}
EchoClient
package 网络编程; import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; class ClientThread implements Runnable {
private Socket client; public ClientThread(Socket client) {
this.client = client;
} @Override
public void run() {
try {
Scanner scan = new Scanner(client.getInputStream());// 接收客户端输入
PrintStream out = new PrintStream(client.getOutputStream());// 输出到客户端
boolean flag = true;
String tmp = "";
while (flag) {
if (scan.hasNext()) {
tmp = scan.next().trim();
if (tmp.equalsIgnoreCase("bye")) {
out.println("再见!");
flag = false;
} else {
out.println("Echo:" + tmp);
}
}
}
out.close();
scan.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} public class TestEchoServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9999);
boolean flag = true;
while (flag) {
Socket client = server.accept();//连接多个客户端
new Thread(new ClientThread(client)).start();//每连接一个客户端启动一个线程
}
server.close();
}
}
EchoServer多线程
【java】网络socket编程简单示例的更多相关文章
- UDP协议网络Socket编程(java实现C/S通信案例)
我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...
- Java:基于TCP协议网络socket编程(实现C/S通信)
目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- Java网络多线程编程:对象流错误导致Connection reset
Java网络多线程编程--对象流错误导致Connection reset 在老韩的网络多线程编程实战项目中,发生了如下报错: 服务器端和客户端均发生了报错,在确定相应对象流代码完全没有问题之后,回归定 ...
- Linux网络编程简单示例
linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭& ...
- Java 网络IO编程(BIO、NIO、AIO)
本概念 BIO编程 传统的BIO编程 代码示例: public class Server { final static int PROT = 8765; public static void main ...
- 【转】java的socket编程
转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...
- (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
原文出自:http://blog.csdn.net/anxpp/article/details/51512200 1.BIO编程 1.1.传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间 ...
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...
随机推荐
- (11.20)Java小知识!
经过一段时间的学习,我也终于来到了Java语言的核心篇,也就是对象与类的学习,今天想要和大家分享的是关于类的小知识点. 1.类的声明: 类可以看成创建Java对象的模板.类亦可以理解成Java一种 ...
- js从时间戳中获取日期
1,从时间戳中解析出年月日时分秒: time为时间戳: var timestr = new Date(parseInt(time) * 1000); var year = timestr.getFul ...
- Redis使用说明详解
原博主地址:http://www.cnblogs.com/wangyuyu/p/3786236.html Redis使用详细教程 一.Redis基础部分: 1.redis介绍与安装比mysql快10倍 ...
- idea for Mac 代码提示设置
1 打开idea. 2 command+, 打开设置 ,移除Cyclic Expand Word 的快捷键 3 设置basic的快捷键为 option+/ 4,自动提示大小写敏感关闭 apply ...
- RecyclerView 加入一个滑动控件bug处理 GridView只显示第一行
如果RecyclerView 多样式布局,比如要加入一个展示多个图看的需求.自然想到用gridview给嵌套一下. 想法当然是可以的,但是发现,嵌套出来的效果是,gridview只显示一行. 想想原因 ...
- 《java.util.concurrent 包源码阅读》26 Fork/Join框架之Join
接下来看看调用ForkJoinTask的join方法都发生了什么: public final V join() { // doJoin方法返回该任务的状态,状态值有三种: // NORMAL, CAN ...
- Nuxt框架实践
前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...
- 学习笔记:UITabBarController使用详解
一.手动创建UITabBarController 最常见的创建UITabBarController的地方就是在application delegate中的 applicationDidFinishLa ...
- Numpy入门 - 数组切片操作
本节主要演示数组的切片操作,数组的切片操作有两种形式:更改原数组的切片操作和不更改原数组的切片操作. 一.更改原数组的切片操作 import numpy as np arr = np.array([1 ...
- 新一代 CI 持续集成工具 flow.ci 正式开源
很高兴地宣布 flow.ci 在 Apache-2.0 协议下正式开源了.flow.ci 是国内首套开源持续集成(CI) 解决方案,帮助企业团队实现开发流程(build-test-deploy)自动化 ...