为什么80%的码农都做不了架构师?>>>   

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议.

面向连接:服务器创建一个连接端口,客户端去连接服务器实现通信。

可靠的:tcp协议是是在连接成功之后才会发送数据,而基于UDP的协议是事先不会征求对方意见,直接将数据传送出去,因此TCP协议传输中,数据更可靠,更安全。

基于字节流:tcp协议中传递的信息是以流的形式传递的,在java中可通过inputstream来捕获,通过outputstream发送。

对于接收数据的时候出现假死的状态:

readLine()函数读取一行,结尾需要"\n"才能结束,不然会一直卡死在这里,因此大家在用printwriter的时候要print一个"\n",然后把printwriter flush掉。就不会假死了!

这样:pw.write("fuck you cient");    //send to server
           pw.write("\n");
           pw.flush();

在java中,tcp协议是已经封装好的类,可直接供用户使用。其中关键的两个类是

Socket类     ServerSocket类。

ServerSocket类用来创建服务器,具体用法请参照jdk文档。常用用法是

ServerSocket ss = new ServerSocket((int)port)     //传入一个端口号,用户自定

Socket用于控制两端的连接,服务器的Socket可以和客户端的Socket相连接:

socket可以使用inputstream和outputstream进行相互通信。

(服务器中通常是将已将建立连接的socket丢给子线程通信,但是点对点可以让服务器处理一个socket就行了,不需要再生成子线程进行通信交流)

代码分为三个文件。

程序运行结果:

以下是代码附上:

//package org.cat.Client;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;public class MyClient {public static void main(String[] args){try {Socket s = new Socket("localhost", 12341);System.out.println("conneting to server successfully");//successfully connecting to server//Now sending some data to server//1.create outputStream and so on...OutputStream out = s.getOutputStream();PrintWriter pw = new  PrintWriter(out);pw.write("fuck you server");  //send to serverpw.write("\n");       //importantpw.flush();System.out.println("I have sended to server");//2.receiving data from serverInputStream in = s.getInputStream();InputStreamReader inReader = new InputStreamReader(in);BufferedReader bfdReader = new BufferedReader(inReader);String tmp = "xxxx,receiving failed";while((tmp = bfdReader.readLine()) != null)System.out.println("server tells:"+tmp);//close allin.close();inReader.close();bfdReader.close();out.close();pw.close();} catch (IOException e) {System.out.println("connecting failed,have u opened server?");e.printStackTrace();}}
}
//package org.cat.Server;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class MyServer {public static void main(String[] args){try {@SuppressWarnings("resource")ServerSocket sers = new ServerSocket(12341);//then wait for client to connectSocket s;System.out.println("waiting for client to connect");s = sers.accept();new MyThread(s);} catch (IOException e) {System.out.println("set up server failed??");e.printStackTrace();}}}
//package org.cat.Server;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;public //service for every client
class MyThread extends Thread{Socket s;public MyThread(Socket s) {this.s = s;start();//telling that connection has been settle up System.out.println("successed to connet with port of"+s.getLocalPort());//now receiving data and talk back to client//1.receivetry {InputStream in = s.getInputStream();InputStreamReader inReader = new InputStreamReader(in);BufferedReader bfdReader = new BufferedReader(inReader);String tmp = "xxxx,receiving failed";if((tmp = bfdReader.readLine()) != null)System.out.println("client tells:"+tmp);//anwser clientOutputStream out = s.getOutputStream();PrintWriter pw = new  PrintWriter(out);pw.write("fuck you cient");   //send to serverpw.write("\n");pw.flush();System.out.println("I have sended to client");//close allout.close();pw.close();in.close();inReader.close();bfdReader.close();} catch (IOException e1) {System.out.println("get inputStream from client failed");e1.printStackTrace();}System.out.println("now to shut connection");try {s.close();System.out.println("shut down connection successfully");} catch (IOException e) {System.out.println("shut server failed,have u opened it?");e.printStackTrace();}}}

转载于:https://my.oschina.net/qkmc/blog/861499

JAVA TCP通信基础篇——对发消息【如何解决输入流假死状态】相关推荐

  1. java 模拟飞秋客户端发消息

    package feiQ; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSo ...

  2. JAVA编写企业微信定时发消息

    可以使用 Java 语言编写定时发送企业微信消息的程序.首先需要获取企业微信开发者文档中提供的接口和 API,然后使用 Java 库如 HttpClient 等发送 HTTP 请求来调用这些 API. ...

  3. udp,tcp软件udp客户端发消息,udp服务器收不到,C#网络编程,多级路由间,UDP发送消息客户端接收不正常?...

    udp协议是不需要进行握手连接的,所以你可能需要循环读取试试: //侦听消息 UdpClient receivingUdpClient = new UdpClient(侦听端口); IPEndPoin ...

  4. java给腾讯通发消息_通过web 向rtx发送通知消息

    请通过调用RTX服务器CGI的方式实现,详细说明如下: 发送消息提醒 方法:GET/POST URL:/sendnotify.cgi 用法举例(IE地址栏中输入): http://192.168.17 ...

  5. java服务器如何群发消息,java TCP编程简单实现一个消息群发功能

    client: package com.lzs.net; import java.io.*; import java.net.Socket; /** * Created by zaish on 201 ...

  6. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?

    我在java中设置一个简单的TCP客户端服务器交互. 服务器: 服务器是用Java编写的桌面客户端: import java.io.BufferedReader; import java.io.Dat ...

  7. java 给微信发消息_(新版)通过java程序,给微信发送消息

    之前写过一篇使用飞鸽快信给自己的微信发送消息的示例.https://blog.csdn.net/xcxzzx01/article/details/80461086 两年多过去了,飞鸽快信已改名捷易快信 ...

  8. 服务器怎么把信息发送给用户,java中怎么用tcp/ip将服务器的消息发送给多个用户...

    java中怎么用tcp/ip将服务器的消息发送给多个用户 关注:253  答案:2  mip版 解决时间 2021-01-31 01:26 提问者╬═掵中注定 2021-01-30 20:03 jav ...

  9. java 仿qq 传文件_java网络编程实现QQ发消息文件,图片等内容

    前言:昨天我们已经初步学习了网络编程到底是怎么一回事儿,今天在此基础上继续学习网络编程,利用网络编程实现 QQ上的发送消息,群聊,私聊等功能. 首先我们来回顾一下昨天的两点基础知识: 1.建立服务器端 ...

最新文章

  1. VirtualBox在桥接模式下无网络处理
  2. 论前端工程师如何应对西电教学评估系统
  3. 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
  4. 比较好用的python编译器_10个最好用的在线编译工具
  5. FFmpeg音频编解码处理
  6. CCF NOI1054 扫雷游戏
  7. 预训练模型真的越大越好吗?听听他们怎么说
  8. linux 车载视频监控,基于Linux平台车载视频监控系统研发-计算机科学与技术专业论文.docx...
  9. png-CRC32校验
  10. 云平台中节点异常如何考虑迁移因素
  11. Modernizr 浏览器兼容功能检测
  12. 用C#语言实现记事本
  13. 舞台音效控制软件_QLab Pro 4.3.2 优秀的舞台音乐控制软件
  14. 数据库基础知识(面试)
  15. 斯坦福大学公开课第四课 Views 视图
  16. ALSA子系统(十三)------snd_pcm_hw_refine硬件参数重定义
  17. Android 白天黑夜模式切换
  18. 前端生产环境调试工具sourcemap的使用
  19. 一行代码去除序列中含有n或者其他简并碱基的低质量序列
  20. 爬虫增加代理池:使用稳定第三方芝麻代理IP 教程(详细可用)

热门文章

  1. java 容器 线程_JAVA多线程并发容器
  2. git怎么上传文件到别人的仓库_Git将本地代码上传至远程仓库
  3. linux:命令常用操作
  4. 深蓝学院《从零开始手写VIO》作业一
  5. 裸辞,迎接2019年的春天
  6. 全球及中国凝胶植入物市场专项调研与供需现状分析报告2022年
  7. 全球及中国食品供应区块链行业运行形势及未来投资规模建议报告2021年版
  8. 传递类型为参数的方法
  9. 工业互联网工信部苗圩谈-谋定研究:对话中国经济和信息化
  10. 个性化服务谋定移动电子商务-李玉庭:经信研究重整购物