(一)第一个例子是简单的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网络通信套接字 | 学步园相关推荐

  1. java运行速度慢的原因_java运行速度慢的原因 | 学步园

    1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度 ...

  2. java中间常用的类_Java实现的中间库 | 学步园

    数据库与数据库之间的数据交互 1. 背景 中间库主要用于解决一个大系统多个数据库,其中多个数据库作用是:用于备份数据或者用于存储业务数据等:中间库还可以用于解决两个系统间的接口问题,2个系统共同操作这 ...

  3. java读取1g超大图片_java读取大文件1G+ | 学步园

    正常读取大文件,可能会想到用缓存 如: package base; import java.io.BufferedInputStream; import java.io.BufferedReader; ...

  4. java套接字通信_JAVA套接字实现简易的双人通信系统

    JAVA套接字实现简易的双人通信系统 JAVA套接字资料 socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装,对用户来说,只要通过一组简单的AP ...

  5. java贪吃蛇客户端服务器_java Socket套接字TCP编程开发服务端和客户端之间的通信 - 贪吃蛇学院-专业IT技术平台...

    超级简单,没有太多实质内容的Socket服务端,客户端小程序 先运行server 再运行client OK 服务端代码如下: public class Server { public static v ...

  6. java发送和接收文件_Java通过套接字发送和接收文件(byte [])

    这是服务器 打开文件流并将其发送到网络 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInpu ...

  7. java 加减运算_JAVA日期加减运算 | 学步园

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); Sys ...

  8. java狗叫_java学习(8) | 学步园

    本讲内容:成员变量.方法.方法的重载.构造函数 一.用程序讲解小白的故事 小白是一条狗,它心情好的时候会恭喜人发财,它心情差的时候会对路人撒野,吓得路人落荒而逃.下面我们用面向对象的方式用程序讲述一下 ...

  9. java mp3 信息_java读取MP3的信息 | 学步园

    标签头"TAG" 3字节 标题 30字节 作者 30字节 专辑 30字节 出品年份 4字节 备注信息 28字节 保留 1字节 音轨 1字节 类型 1字节 import java.i ...

  10. java ocr识别中文_java零碎要点—Tesseract 3.0,Java OCR 图像智能字符识别技术,可识别中文 | 学步园...

    2.Java OCR 图像智能字符识别技术,可识别中文 几天一直在研究OCR技术,据我了解的情况,国内最专业的OCR软件只有2家,清华TH-OCR和汉王OCR,看了很多的OCR 技术发现好多对英文与数 ...

最新文章

  1. 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符
  2. 像童话一样学习OSPF原理
  3. 网站建设中你不知道的八大SEO技巧
  4. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
  5. 中兴服务器raid配置_-服务器Raid卡更换后如何恢复硬盘Raid组信息
  6. Excel关于使用图形的妙招技法
  7. python lambda map reduce_简单了解python filter、map、reduce的区别
  8. Fish Redux 使用指南
  9. 数组作为方法的返回值
  10. Ubuntu 之旅(三)安装通讯工具
  11. linux内核 eql.c,Linux Kernel EQL_GETMASTRCFG请求内核信息泄露漏洞
  12. netty源码解解析(4.0)-15 Channel NIO实现:写数据
  13. jruby环境下REDMINE安装纪要
  14. 数据流分析之WorkList Algorithm
  15. matlab 2ask原理,基于Matlab对2ASK调制解调及其仿真设计
  16. Convert excel format exception.You can try specifying the ‘excelType‘ yourse-----EasyExcel导入
  17. Android手机游戏开发入门教程
  18. 力扣报错 error: <identifier> expected
  19. linux免采集卡直播ps4,PS4游戏直播采集卡使用教程详解
  20. Ubuntu 20.04 LTS 操作系统必装软件和设置

热门文章

  1. java 文本框怎么属性绑定_如何将对象属性绑定到angular2中的文本框
  2. ScrollRect裁剪ParticleSystem粒子
  3. java 读取 properties 配置文件的几种方式
  4. java模仿银行账务业务_一个银行转账业务模型分析:大魏Java记5-7
  5. ASP.NET事件回传机制
  6. 小猿圈之Python开发的技巧一?
  7. CentOS 安装rz和sz命令
  8. 研磨设计模式学习笔记1--简单工厂(SimpleFactory)
  9. mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式
  10. Core Animation基础 1