java套接字通信_Java网络通信套接字 | 学步园
(一)第一个例子是简单的Socket通信,一个客户端和一个服务器线程:
/**
* SimpleClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleClient {
public static void main(String[] args) {
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null;
try {
//请求建立通信套接字
socket = new Socket("localhost",8089);
//获取输入输出流
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);//true means autoFlush
//while(true){
writer.println("hello, I am Client\n");
String mess = reader.readLine();
System.out.print("Client Receive:"+mess);
//}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket != null) socket.close();
if(reader != null) reader.close();
} catch (IOException e) {
e.printStackTrace();
}
if(writer != null) writer.close();
}
}
}
/**
* SimpleServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
ServerSocket ss = null;//用于接收请求的Socket
Socket socket = null;//用于通信的Socket
BufferedReader reader = null;
PrintWriter writer = null;
try {
ss = new ServerSocket(8089);
System.out.print("waiting for new request...\n");
socket = ss.accept();//等待请求,建立通信Socket
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
String mess = reader.readLine();
System.out.print("Server Receive:"+mess);
writer.println("Yes, I can hear you");
} catch (IOException e) {
e.printStackTrace();
}
}
}
(二)第二个列子是在服务器端,采用多线程方式处理来自客户端的请求:
/**
* TCPClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
private static int id = 0;
public static void main(String[] args) {
String host = "localhost";
int port = 8060;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
//创建五个请求服务器连接的客户端
for(int i=0;i<5;i++){
//创建通信套接字
socket = new Socket(host, port);
//获取套接字的输入输出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//向服务器发送消息
out.println("hello, i am client "+(++id));
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Socket...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
/**
* TCPServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
int port = 8060;
Socket socket = null;
ServerSocket server = null;
try {
//创建服务器套接字
server = new ServerSocket(port);
while(true){
//接收来自客户端的请求,建立通信套接字
System.out.print("waiting for new request...\n");
socket = server.accept();
//创建一个线程处理该请求
Thread t = new Thread(new ServerThread(socket));
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(server != null) server.close();
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 处理来自客户端请求的线程
* */
class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket s){
this.socket = s;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
//获取套接字的输入输出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//读取客户端发送来的消息
String s = in.readLine();
System.out.println("recv:"+s);
//out.write("accept");
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Connection...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
java套接字通信_Java网络通信套接字 | 学步园相关推荐
- java运行速度慢的原因_java运行速度慢的原因 | 学步园
1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度 ...
- java中间常用的类_Java实现的中间库 | 学步园
数据库与数据库之间的数据交互 1. 背景 中间库主要用于解决一个大系统多个数据库,其中多个数据库作用是:用于备份数据或者用于存储业务数据等:中间库还可以用于解决两个系统间的接口问题,2个系统共同操作这 ...
- java读取1g超大图片_java读取大文件1G+ | 学步园
正常读取大文件,可能会想到用缓存 如: package base; import java.io.BufferedInputStream; import java.io.BufferedReader; ...
- java套接字通信_JAVA套接字实现简易的双人通信系统
JAVA套接字实现简易的双人通信系统 JAVA套接字资料 socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装,对用户来说,只要通过一组简单的AP ...
- java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...
超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...
- java发送和接收文件_Java通过套接字发送和接收文件(byte [])
这是服务器 打开文件流并将其发送到网络 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInpu ...
- java 加减运算_JAVA日期加减运算 | 学步园
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); Sys ...
- java狗叫_java学习(8) | 学步园
本讲内容:成员变量.方法.方法的重载.构造函数 一.用程序讲解小白的故事 小白是一条狗,它心情好的时候会恭喜人发财,它心情差的时候会对路人撒野,吓得路人落荒而逃.下面我们用面向对象的方式用程序讲述一下 ...
- java mp3 信息_java读取MP3的信息 | 学步园
标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...
- java ocr识别中文_java零碎要点—Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文 | 学步园...
2.Java OCR 图像智能字符识别技术,可识别中文 几天一直在研究OCR技术,据我了解的情况,国内最专业的OCR软件只有2家,清华TH-OCR和汉王OCR,看了很多的OCR 技术发现好多对英文与数 ...
最新文章
- 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符
- 像童话一样学习OSPF原理
- 网站建设中你不知道的八大SEO技巧
- Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
- 中兴服务器raid配置_-服务器Raid卡更换后如何恢复硬盘Raid组信息
- Excel关于使用图形的妙招技法
- python lambda map reduce_简单了解python filter、map、reduce的区别
- Fish Redux 使用指南
- 数组作为方法的返回值
- Ubuntu 之旅(三)安装通讯工具
- linux内核 eql.c,Linux Kernel EQL_GETMASTRCFG请求内核信息泄露漏洞
- netty源码解解析(4.0)-15 Channel NIO实现:写数据
- jruby环境下REDMINE安装纪要
- 数据流分析之WorkList Algorithm
- matlab 2ask原理,基于Matlab对2ASK调制解调及其仿真设计
- Convert excel format exception.You can try specifying the ‘excelType‘ yourse-----EasyExcel导入
- Android手机游戏开发入门教程
- 力扣报错 error: <identifier> expected
- linux免采集卡直播ps4,PS4游戏直播采集卡使用教程详解
- Ubuntu 20.04 LTS 操作系统必装软件和设置