【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自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...
随机推荐
- ubuntu-16.04使用MDK3伪造wifi热点和攻击wifi热点至死
MDK3是? MDK3 是一款无线DOS 攻击测试工具,能够发起Beacon Flood.Authentication DoS.Deauthentication/Disassociation Amok ...
- es6环境搭建
安装node环境 地址:https://nodejs.org/en/download/ 建立项目目录 建立一个项目目录es6-demo,并在目录下建立两个子文件夹src和dist: src:源代码es ...
- 2.1synchronized同步方法
由前言: 在第一章已经出现了非线程安全的情况."非线程安全"其实会发生在多个线程同时对同一个对象中的实例变量进行访问时发生.产生的结果就是脏读(读到被修改过的数据). " ...
- Linux系统bash shell之历史命令
1.相关变量: HISTSIZE: 定义命令历史记录的条数 HISTFILE: 定义命令储存的文件,一般是 ~/.bash_history HISTFILESIZE: 定义了历史文件记录历史的条数 H ...
- Makefile中的变量和shell变量
我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节.让我们从一个简单的makefile来看看. 注意makefile中一定要有一个目标,且一定 ...
- .net程序员做的第一个安卓APP
我从毕业之后一直做的是ASP.NET,从毕业到现在都已经五六个年头了.一个事物接触久了就会慢慢没有了新鲜感热情也褪去的差不多了,我又是对新事物比较感兴趣的,虽说Android早就不算什么新事物,当对于 ...
- numpy中关于*和dot的区别
1.numpy乘法运算中"*"是数组元素逐个计算 >>> import numpy as np >>> a = np.array([[2,3], ...
- 实战-CentOS6.8配置nfs服务
如题 #服务端:请自行配置yum源 命令操作:yum install nfs-utils rpcbind #配置文件编辑:vi /etc/exports /data 0.0.0.0 (rw,sync, ...
- 76、django之内置Admin
本篇导航: 配置路由 定制Admin Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django ...
- NOIP2016提高组初赛(2)四、阅读程序写结果2、
#include <iostream> using namespace std; int main() { ][], b[][]; ]; string tmp; , j = , k = , ...