全栈工程师开发手册 (作者:栾鹏)
java教程全解

java实现tcp服务器(单线程、多线程)、客户端。

服务器端接收客户申请,响应时间戳和用户源字符串。

客户端使用控制台作为输入输出流

tcp服务器端代码

package com.lp.app.net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;//tcp服务器,单线程和多线程
public class TCPServer{public static void main(String[] args) {moreserver(1234);}//读取输入文本,返回响应文本(二级制,对象)public static void  server(int port) {try {//创建一个serversocketServerSocket mysocket=new ServerSocket(port);//等待监听是否有客户端连接Socket sk = mysocket.accept();//接收文本信息BufferedReader in =new BufferedReader(new InputStreamReader(sk.getInputStream()));String data =in.readLine();System.out.println("客户端消息:"+data);//           //接收二进制字节流
//          DataInputStream dis =new DataInputStream(new BufferedInputStream(sk.getInputStream()));
//          byte[] enter =new byte[dis.available()];
//          dis.read(enter);
//
//          //接收对象信息
//          ObjectInput ois =new ObjectInputStream(new BufferedInputStream(sk.getInputStream()));
//          Object object=ois.readObject();//输出文本PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())),true);out.println(new Date().toString()+":"+data);   //服务器返回时间和客户发送来的消息out.close();//          //输出二进制
//          DataOutputStream dos=new DataOutputStream(sk.getOutputStream());
//          byte[] back="luanpeng".getBytes();
//          dos.write(back);
//
//          //输出对象
//          ObjectOutputStream oos=new ObjectOutputStream(sk.getOutputStream());
//          oos.writeObject(new Date());  //返回一个时间对象
//          oos.close();} catch (Exception e) {// TODO: handle exception}}//多线程服务器public static void moreserver(int port){try {System.out.println("服务器启动...............");ServerSocket server=new ServerSocket(port);while(true){//阻塞,直到有客户连接Socket sk=server.accept();//启动服务线程new ServerThread(sk).start();}} catch (Exception e) {e.printStackTrace();}}}//使用线程为多个客户端服务
class ServerThread extends Thread
{private Socket sk;ServerThread(Socket sk){this.sk=sk;}//线程运行实体public void run() {BufferedReader in=null;PrintWriter out=null;try {InputStreamReader isr;isr=new InputStreamReader(sk.getInputStream());in=new BufferedReader(isr);out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())),true);while(true){//接收来自客户端的请求,根据不同的命令返回不同的信息String cmd=in.readLine();System.out.println(cmd);if (cmd==null) {break;}out.println(new Date().toString()+":"+cmd);   //服务器返回时间和客户发送来的消息}} catch (Exception e) {e.printStackTrace();}finally{try {if (in!=null) {in.close();}if (out!=null) {out.close();}if (sk!=null) {sk.close();}} catch (Exception e2) {e2.printStackTrace();}}}
}

tcp客户端代码

package com.lp.app.net;import java.io.*;
import java.net.*;//客户端
public class TCPClient {public static void main(String [] args) throws IOException {connect("192.168.8.102", 1234);}//远程连接public static void connect(String host,int port){try {System.out.println("客户端启动...............");Socket sock = new Socket(host, port);// 创建一个写线程new TelnetWriter(sock.getOutputStream()).start();// 创建一个读线程new TelnetReader(sock.getInputStream()).start();} catch (Exception e) {// TODO: handle exception}}
}//从控制台读取用户输入命令   线程类
class TelnetWriter extends Thread {private PrintStream out;public TelnetWriter(OutputStream out) {this.out = new PrintStream(out);}public void run() {try {// 包装控制台输入流BufferedReader in = new BufferedReader(new InputStreamReader(System.in));// 反复将控制台输入写到Telnet服务程序while (true)  out.println(in.readLine());} catch (IOException exc) {exc.printStackTrace();}}
}//将响应数据打印到控制台   线程类
class TelnetReader extends Thread {private InputStreamReader in;public TelnetReader(InputStream in) {this.in = new InputStreamReader(in);}public void run() {try {// 反复将Telnet服务程序的反馈信息显示在控制台屏幕上while (true) {// 从Telnet服务程序读取数据int b = in.read();if (b == -1)  System.exit(0);// 将数据显示在控制台屏幕上System.out.print((char) b);}} catch (IOException exc) {exc.printStackTrace();}}
}

java实现tcp服务器(单线程、多线程)、客户端相关推荐

  1. tcp服务器维护接入客户端mac,tcp服务器怎么获取客户端mac

    tcp服务器怎么获取客户端mac 内容精选 换一换 本章节中介绍的初始配置操作只需在每台终端设备上配置一次.初始配置需要的数据及其详细配置步骤,由管理员根据实际情况定制.客户端支持中标麒麟桌面操作系统 ...

  2. java BIO tcp服务端向客户端消息群发代码教程实战

    前言 项目需要和第三方厂商的服务需要用TCP协议通讯,考虑到彼此双方可能都会有断网重连.宕机重启的情况,需要保证 发生上述情况后,服务之间能够自动实现重新通信.研究测试之后整理如下代码实现.因为发现客 ...

  3. 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端

    源码的下载地址以及socket环境搭建请看这篇博文 http://blog.csdn.net/qq78442761/article/details/60601945 这里我们先看看服务端的tcp搭建 ...

  4. java建立tcp服务器长连接_B/S 架构下后端能否建立 TCP 长连接?

    这种架构下,这样的优化策略能实现吗?能有作用吗? php 服务端请求 ES tcp server 部分代码 $streamClient = stream_socket_client("tcp ...

  5. JAVA服务器没回应_Java Socket为什么服务器无法回复客户端

    Java Socket为什么服务器无法回复客户端 我想写代码让客户端发送一个字符串给Server,Server打印字符串并回复一个字符串,然后Client打印字符串Server reply. 我的服务 ...

  6. 一个基于Java的syslog服务器,大家都来看看啊!

    一个基于Java的syslog服务器 前言 前期准备 功能效果图 接收到的数据只能输出到控制台的问题解决方法 具体代码 结语 前言 当时接到要开发syslog功能时,我的表情是这样的- 啥是syslo ...

  7. Java的TCP/UDP网络编程+多线程实现服务器端与客户端间的通信

    写在前面: Java为网络编程提供了丰富的库,我们能通过调用Socket套接字的方法实现服务器与客户端的双通信. 注意点: 需要注意的是端口的对应,端口可以理解为窗户,服务器只能通过某个端口(窗户)与 ...

  8. tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区

    tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区 tcp和udp多线程的epoll服务器+客户端源代码

  9. python服务器qt客户端_python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例...

    本文在上文的基础上重新实现支持多线程的服务器. 以下为TCP客户端的程序代码: #!/usr/bin/env python3 import sys from PyQt5.QtCore import ( ...

最新文章

  1. 在一台电脑上使用两个github账号
  2. MATLAB句柄相关函数和代码示例(设置美化图表属性)
  3. sublime4 安装pretty json 并绑定快捷键
  4. 6.824 RPC lesson2 2020(一)
  5. ROS笔记(40) 通讯节点
  6. 该怎么输出log?!
  7. 吃了核辐射食物怎么办_不瞒你说:经常胃酸烧心怎么办?,多吃这些食物,保护胃黏膜远...
  8. 【matlab2014B安装教程及下载】
  9. 即时通讯工具:Output Messenger Server
  10. 软件分享 AirPlayer
  11. linux oracle ora-12162,oracle ORA-12162: TNS:net service name is incorrectly specified
  12. 网站建设 之 CSS渐变
  13. 分布式事务之柔性事务
  14. MES系统业务需求收集及整理
  15. 2022年中国工业互联网安全大赛北京市选拔赛暨全国线上预选赛MISC-工控文件Writeup
  16. My Heart Will Go On(我心永恒)
  17. 小米有品众筹仅249!Oclean X智能触屏电动牙刷6日劲爆开抢
  18. 为什么我劝90%的人不要转行数据分析?数据岗真没你想的那么香
  19. 计算机术语CAE是指,计算机应用基础 1
  20. 不能面对的问题还是在逃避

热门文章

  1. 根据百度的语音识别例子,展示C如何调用C++库
  2. 数据库errno: 1045的解决办法
  3. Vue前后端交互实现图书管理功能
  4. iar编译工程的map怎么看使用flash大小_ESP8266_08基于flash的数据掉电保护
  5. 剑指offer||3 前n个数二进制数中1的个数
  6. ps打开闪退_PS教程派 | 水花四溅的草莓切块效果,如此简单!
  7. 编译原理语义分析_编译原理 第一章 绪论
  8. es文件浏览器怎么用_谷歌出品的文件管理APP,比ES文件浏览器更简约
  9. mysql oltp_oltp数据库mysql
  10. 小米鸿蒙最新信息,小米新机将搭载鸿蒙系统?还得等鸿蒙进一步的消息!