Socket协议网上介绍的有很多了,就不在画蛇添足了,本文主要编写一个小Demo,介绍下它具体实现

一:Socket服务器端

package com.founderit;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; public class HelloServer { public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
ServerSocket serverSocket= new ServerSocket(1234);
while (true){
Socket socket= serverSocket.accept();
in=socket.getInputStream();
InputStreamReader reader= new InputStreamReader(in);
StringBuilder builder=new StringBuilder();
for (int c = reader.read(); c != -1; c = reader.read()) {
builder.append((char)c);
}
System.out.println("收到的客户端请求为:-------"+builder.toString());
out=socket.getOutputStream();
out.write("请求已接收,over".getBytes());
out.flush();
socket.shutdownOutput();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
in.close();
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
} 二:Socket客户端

package com.founderit.controller;

import java.io.*;
import java.net.Socket; public class SocketClient {
public static void main(String[] args) {
OutputStream out=null;
InputStream in=null;
Socket socket=null;
try {
socket=new Socket("localhost",1234);
out=socket.getOutputStream();
out.write("呼叫服务器,收到请回答".getBytes());
socket.shutdownOutput();
//获取输入流,并读取服务器端的响应信息
in=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(in));
StringBuilder sb=new StringBuilder();
String info=null;
while ((info=br.readLine())!=null){
sb.append(info);
}
System.out.println("收到服务端回复:"+sb.toString());
br.close();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
out.flush();
out.close();
in.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
} } 首先执行Socket服务端,它会一直运行等待接收请求,创建socketServer需要绑定端口,这个端口需需要与客户端一致
然后执行Socket客户端,它会发送Socket请求给服务端并接收服务器端反馈,运行效果如下

需要注意的是无论是客户端与服务端,执行write()方法后最好执行socket.shutdownOutput()方法关闭输出流,不然有几率写入不成功(原因未知)

----------------------------------------------------------------------------------------------------------------------我是分割线---------------------------------------------------------------------------------------------------------------------------------------------上面的Demo只是个单机版,在实际工作中不会只有一个客户端请求,下面我们将改造Socket服务器端,使其支持多线程

Socket服务器端

首先抽调具体实现,新建个具体实现类

package com.founderit;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Date; public class HelloRunable implements Runnable{
Socket socket;
InputStream in = null;
OutputStream out = null;
public HelloRunable(Socket clientSocket){
this.socket=clientSocket;
}
@Override
public void run() {
try {
in=socket.getInputStream();
InputStreamReader reader= new InputStreamReader(in);
StringBuilder builder=new StringBuilder();
for (int c = reader.read(); c != -1; c = reader.read()) {
builder.append((char)c);
}
System.out.println("收到的客户端请求为:-------"+ new Date().toString()+ builder.toString());
out=socket.getOutputStream();
out.write("请求已接收,over".getBytes());
out.flush();
socket.shutdownOutput();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
in.close();
out.flush();
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
接收类

package com.founderit;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; public class HelloServer { public static void main(String[] args) { try {
ServerSocket serverSocket= new ServerSocket(1234);
while (true){
Socket socket=serverSocket.accept();
new Thread(new HelloRunable(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
改造后,Socket服务端接收到请求后,会直接开启一个新线程执行任务

Socket简单Demo的更多相关文章

  1. windows下对socket的send和recv的超时设置,并附一个简洁明了的socket简单demo

    设置方法 int nNetTimeout=10000;//10秒,    //设置发送超时    setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char *) ...

  2. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  3. 设计模式之单例模式的简单demo

    /* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...

  4. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  5. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  6. Managed DirectX中的DirectShow应用(简单Demo及源码)

    阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...

  7. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  8. 12、android socket使用demo:网络聊天

    目录: 一.效果图 二.原代码分享 三.代码分析 四.总结 一.效果图如下: 客户端1: 客户端2:           二.原代码分享如下: 1.java代码只有一个 MainActivity.ja ...

  9. Solr配置与简单Demo[转]

    Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...

随机推荐

  1. Qt 反射,moc,Q_INVOKABLE

    使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起 Q_INVOKABLE与QMetaObject::invokeMethod均由元对象系统唤起.这一机制在Qt ...

  2. 单页面应用程序(SPA)

    一.概念 ①在一个页面上实现网站的大部分功能,就是单页面应用程序,是一种常见的网页开发模式. ②整个网站就只有一个Html文件,每次在切换页面时,不需要请求服务器,只要通过本地的js来切换即可.这样可 ...

  3. shell test条件检查

    Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt ...

  4. kafka 创建消费者报错

    kafka-console-consumer.sh --zookeeper master:2181,slave1:2181,slave2:2181 --topic test --from-beginn ...

  5. Vue.js2.5+cube-ui重构饿了么App*下载

    第1章 课程导学 第2章 项目准备工作 第3章 头部组件开发 第4章 Tab 组件开发 第5章 商品页面开发 第6章 商品详情页开发 第7章 评价和商家页面开发 第8章 create-api 原理分析 ...

  6. Redis主从搭建环境

    一.环境准备 软件环境 redis版本: redis-4.0 操作系统:Centos-7.5 IP:192.168.1.190(主redis) 192.168.1.191(从redis) 硬件环境 服 ...

  7. 如何在 Debian 9 上安装和使用 Docker

    Docker 是一个容器化平台,允许您快速构建,测试和部署应用程序,作为便携式,自给自足的容器,几乎可以在任何地方运行. Docker 是容器技术的事实上的标准,它是 DevOps 工程师及其持续集成 ...

  8. 刷题记录:2018HCTF&admin

    目录 刷题记录:2018HCTF&admin 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:2018HCTF&admin 一.前言 经过一个暑假的学习,算是正经一条web狗 ...

  9. mybatis Example Criteria like 模糊查询

    用Mybatis代码生成工具会产生很多个XXXExample类,这些类的作用是什么? 查阅了很多资料,在这里总结归纳一下 简介XXXExample类用于构造复杂的筛选条件 它包含一个名为Criteri ...

  10. Eclipse创建Maven父子项目

    Eclipse创建Maven父子项目 - 木头若愚 - CSDN博客https://blog.csdn.net/jay_1989/article/details/53906995 创建maven项目是 ...