关于什么是Socket:

A socket is one end-point of a two-way communication link between two programs running on the network.

Socket是网络上运行的2个程序之间通信链接的终点。说白了就是代表一条通信链路的两端。

Socket classes are used to represent the connection between a client program and a server program.

Socket类用来代表客户端程序和服务器端程序的连接。

The java.net package provides two classes--Socket and ServerSocket--that implement the client side of the connection and the server side of the connection, respectively

Java中的java.net包提供了Socket和ServerSocket类分别实现连接的客户端和服务端。

Java中如何编写?

服务器端:

package com.dylan.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; /**
* 服务器
*
* @author xusucheng
* @create 2017-12-21
**/
public class Server {
public static final int PORT = 8858;//监听的端口号 public static void main(String[] args) throws Exception {
System.out.println("Server started! Listening...");
ServerSocket serverSocket = new ServerSocket(PORT);
Socket server = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter out = new PrintWriter(server.getOutputStream()); String readLine = in.readLine();
if (readLine != null) {
System.out.println("Receive message from Client: " + readLine);
out.println("Roger!");
} out.close();
in.close();
server.close();
serverSocket.close(); } }

客户端:

package com.dylan.socket;

import java.io.*;
import java.net.Socket; /**
* 客户端
*
* @author xusucheng
* @create 2017-12-20
**/
public class Client {
public static final String HOST = "127.0.0.1";//服务器地址
public static final int PORT = 8858;//服务器端口号 public static void main(String[] args) throws Exception{
Socket client = new Socket(HOST,PORT);
//创建输入流
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//创建输出流
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
//向服务器程序发送信息
out.println("Hello Server! This is Client! ");
//接收来自服务器程序的响应
String readLine=in.readLine();
if(readLine!=null){
System.out.println("Receive message from Server: "+readLine);
} //关闭链接
out.close();
in.close();
client.close();
}
}

启动

服务器端

Server started! Listening...

Receive message from Client: Hello Server! This is Client!

客户端:

Receive message from Server: Roger!

Java Socket编程系列(一)开发一次性会话的Server和Client的更多相关文章

  1. Java基础:三步学会Java Socket编程

    Java基础:三步学会Java Socket编程 http://tech.163.com 2006-04-10 09:17:18 来源: java-cn 网友评论11 条 论坛        第一步 ...

  2. Java并发编程系列-(6) Java线程池

    6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...

  3. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

  4. 如何为可扩展系统进行Java Socket编程

    从简单I/O到异步非阻塞channel的Java Socket模型演变之旅 上世纪九十年代后期,我在一家在线视频游戏工资工作,在哪里我主要的工作就是编写Unix Unix Berkley Socket ...

  5. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  6. Java并发编程系列-(2) 线程的并发工具类

    2.线程的并发工具类 2.1 Fork-Join JDK 7中引入了fork-join框架,专门来解决计算密集型的任务.可以将一个大任务,拆分成若干个小任务,如下图所示: Fork-Join框架利用了 ...

  7. Java并发编程系列-(7) Java线程安全

    7. 线程安全 7.1 线程安全的定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的. 类的线程安全表现为: 操作的原子性 内存的可见性 不 ...

  8. 原创】Java并发编程系列2:线程概念与基础操作

    [原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...

  9. Java Socket编程(转)

    Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...

  10. 干货:Java并发编程系列之volatile(二)

    接上一篇<Java并发编程系列之synchronized(一)>,这是第二篇,说的是关于并发编程的volatile元素. Java语言规范第三版中对volatile的定义如下:Java编程 ...

随机推荐

  1. mysql-字符函数-拼接-长度-切片-替换

  2. [转帖]浅析TiDB二阶段提交

    https://cloud.tencent.com/developer/article/1608073 关键内容说明: TiDB 对于每个事务,会涉及改动的所有key中,选择出一个作为当前事务的Pri ...

  3. [转帖]Elasticsearch 的 30 个调优最佳实践!

    Elasticsearch 的 30 个调优最佳实践! https://zhuanlan.zhihu.com/p/406264041 ES 发布时带有的默认值,可为 es 的开箱即用带来很好的体验.全 ...

  4. Linux运行服务的几种方式

    摘要 1. nohup & 2. screen 3. bg & disown 4. systemd 5. crontab @reboot 背景 最近一直在用linux 想着多总结一下. ...

  5. 在WPF应用中,结合阿里矢量图标库使用Geometry图标

    在我们的SqlSugar开发框架的WPF应端中,有时候我们需要在按钮或者其他界面元素上使用一些图标,框架中我们可以使用 lepoco/wpfui 项目的图标库,也可以使用Font-Awesome-WP ...

  6. Spring Cloud 系列:基于Seata 实现 XA模式

    https://seata.io/zh-cn/docs/user/mode/xa https://seata.io/zh-cn/docs/dev/mode/xa-mode XA 规范 是 X/Open ...

  7. C# await和Result对比

    1.Result 上图是微软官网的截图,由图可知在使用GetXXXX的方法的时候,会阻塞调用其他线程,直到当前异步操作完成,相当于调用wait方法.但是使用异步编程应该避免使用TASK.WAIT或TA ...

  8. 在bat中切换盘符

    在bat代码中如何在不同的盘符中切换?直接输入盘符的名字,前面不要加cd,示例 cd %~dp0 d: cd D:\Python37 e: cd E:\Code\KSFramework c: cd C ...

  9. TienChin 活动管理-准备工作

    配置权限 INSERT INTO `sys_menu` VALUES (2014, '添加活动', 2003, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'tie ...

  10. ChatGPT 火了,一大批开源平替也来了

    ChatGPT 凭一己之力让全球为 AI 沸腾,引发了科技巨头之间的聊天机器人军备竞赛.   众所周知,ChatGPT 的背后技术是 GPT(Generative Pre-trained Transf ...