演示TCP的传输的客户端和服务端的互访

需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。

客户端:
1.建立Socket服务,指定要连接方朵和端口
2.获取Socket流中的输出流,将数据写到该流中,通过网络发送给服务端。
3.获取socket流中的输入流,将服务端反映的数据获取到,找打印。

4.关闭客户端。

客户端:

class TcpClient2{public static void main(String[] args) throws Exception{Socket a=new Socket("172.16.196.12",10004);OutputStream out=s.getOutputStream();out.write("服务端你好".getBytes());InputStream in=s.getInputStream();byte[] buf=new byte[1024];int len=in.read(buf);//只有等待服务端发送数据,才能进行开始读System.out.println(new String(buf,0,len));s.close();}
}
</pre><strong><span style="color:rgb(255,0,0); font-size:18px">服务端:</span></strong><pre code_snippet_id="272018" snippet_file_name="blog_20140403_2_3221842" name="code" class="html">class TcpServer2{public static void main(String[] args){//不要觉得代码差不多,是两个独立的程序ServerSocket ss=new ServerSocket(10004);//监听10004端口Socket s=ss.accept();String ip=s.getInetAddress().getHostAddress();//拿到客户端的地址System.out.println(ip+"...is connect");InputStrean in=s.getInputStream();byte [] buf=new byte[1024];int len=in.read(buf);System.out.println(new String(buf,0,len));OutputStream out=s.getOutputStream();out.write("哥们收到".getBytes());s.close();ss.close();}}

需求:建立一个文本转换器
客户端给服务端发送文本,服务端会将文本转成大写返回给客户端。
而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束
既然是操作设备上的数据,那么就可以使用IO技术,并按照IO的操作规律来思考,
源:键盘录入
目的:网络设备,网络输出流。
而且操作的基本文档,可以选择字符流。
步骤:
1.建立服务。
2.获取键盘录入。
3.将数据发给服务端。
4.取服务端返回的大写数据。
5.结束,关闭资源。
都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲

class TransClient{public static void main(String [] args){Socket s=new Socket("172.16.196.12",10005);//定义读取键盘数据的流对象BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//定义目的:将数据写入到socket输出流,发给服务端。BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//这是用到转换流,OutputStreamWriter.//定义一个socket读取流。读取服务端返回的大写信息。BufferedReader bufIn=new BufferedReader(new InputStreamReader(e.getInputStream()));String line=null;while((line=bufr.readLine())!null){if("over".equals(line))break;bufOut.write(line+"\r\n");//这个地方要加换行。不然服务端没法找到什么时候结束。bufOut.flush();String str=bufIn.readLine();System.out.println("server"+str);}butr.close();s.close();}
}

服务端:
源:Socket读取流
目的:socket输出流
都是文本

class TransServer{public static void main(String[] args)throws Exception{ServerSocket ss=new ServerSocket(10005);Socket s=ss.accept();String ip=s.getInetAddress().getHostAddress();System.out.println(ip+"....is connected");//读取socket读取流中的数据BufferedReader bufIn=new BufferedReader(new InputStreamReader(e.getInputStream()));//目的。socket输出流,将大写数据写入到socket输出流,并发送给客户端BufferedWriter bufOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream());String line=null;while((line=bufIn.readLine())!null){//判断的是回车标识//当关闭服务端时,客户端也相应结束。System.out.println(line);bufOut.write(line.toUpperCase());bufOut.newLine();bufOut.flush();}s.close();ss.close();}}

//该例子出现的问题
现象:客户端和服务端都在莫名的等待。
为什么?以后就查阻塞式方式

因为客户端和服务端都有阻塞式方法。这些方法没有读到结束标识。那么就一直等待而导致两端。都在等待。


编写一个聊天程序。
有收数据的部分,和发数据的部分。
这两部分需要同时执行。
那就需要用到多线程技术。
一个线程控制收,一个线程控制发。

因为收和发动作是不一致的,所以要定义两个run方法。
而且这两个方法要封装到不同的类中。

发送:

import java.io.*;
import java.net.*;
class Send implements Runnable
{private DatagramSocket ds;public Send(DatagramSocket ds){this.ds = ds;}public void run(){try{BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String line = null;while((line=bufr.readLine())!=null){byte[] buf = line.getBytes();DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("172.16.196.12"),10002);ds.send(dp);if("886".equals(line))break;}}catch (Exception e){throw new RuntimeException("发送端失败");}}
}

接收:

class Rece implements Runnable
{private DatagramSocket ds;public Rece(DatagramSocket ds){this.ds = ds;}public void run(){try{while(true){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp);String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());if("886".equals(data)){System.out.println(ip+"....离开聊天室");break;}System.out.println(ip+":"+data);}}catch (Exception e){throw new RuntimeException("接收端失败");}}
}

主函数,是用来调用的

class  ChatDemo
{public static void main(String[] args) throws Exception{DatagramSocket sendSocket = new DatagramSocket();DatagramSocket receSocket = new DatagramSocket(10002);new Thread(new Send(sendSocket)).start();new Thread(new Rece(receSocket)).start();}
}

Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序相关推荐

  1. 黑马程序员 java基础之网络编程TCP

    TCP网络传输. 客户端和服务端 分别对应着两个对象. Scoket(客户端)和ServerSocket(服务端). Socket(String  address, int port) 创建一个流套接 ...

  2. 大数据 -- java基础16 网络编程 TCP UDP

    1.网络编程的三要素:(1)IP地址(2)端口号(3)协议 2.IP地址 : 网络中计算机唯一标识. (1)IP地址在计算机中存储的时候是由二进制的形式进行存储的:IP:192.168.7.42 十进 ...

  3. Java网络编程实例---------------------------------基本HTTP客户端及服务端多线程

    HTTP 1.0客户端 package com.bq;import java.io.BufferedReader; import java.io.InputStreamReader; import j ...

  4. JAVA基础11 网络编程

    JAVA基础 11.网络编程 1.什么是网络?网络模型?网络四要素? 1.网络 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 资源的 ...

  5. 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

    文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...

  6. Java基础23 网络编程 socket套接字流 TCP传输总结

    一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...

  7. Java基础:网络编程

    1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计 ...

  8. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计

    [JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...

  9. java基础:网络编程(一)简介

    网络编程简介 这些知识点在学习计算机网络时都有详细讲,我这就简单介绍下,具体的看计算机网络相关知识. 1.软件结构 常见的软件结构有C/S和B/S C/S (Client/Server) 表示客户端/ ...

  10. Java 基础之网络编程

    网络编程 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结 ...

最新文章

  1. 百度SLG拿下前锤子科技CTO钱晨,还要合并小鱼在家? | 极客头条
  2. 序列化中的[NonSerialized]字段 -转
  3. 了解HAProxy原理及参数
  4. Python学习之变量、对象和引用
  5. 23-Python3 File
  6. ArrayBlockingQueue原理分析-remove方法
  7. 知乎大神深入解析:单片机晶振脚原理是什么?
  8. c#爬虫-使用ChromeDriver 所见即所得
  9. shell 字典_腾讯T4周末不陪对象,就为了手打这份shell编程笔记
  10. [poj2234]Matces Game_博弈论
  11. 一个新时代的降临:智慧的医疗系统
  12. java 网格包,求大神解答:JAVA网格包布局管理器小程序问题
  13. Geos库学习之(四)——几何对象空间关系判断实例
  14. 修改PPT文档属性工具使用教程
  15. win10配置免密登录linux(centos7)
  16. 基于K8S的容器化PaaS平台建设
  17. 限制input输入字符数(中文2个字符,英文1个字符)
  18. 华为服务器ip从bios哪里修改,服务器bios设置ip
  19. 计算机网络英文论文,计算机网络与因特网论文(英文版).doc
  20. 让 AirDrop 支持有线传输,甚至让不支持 AirDrop 的 Mac 也能使用该功能 黑苹果也可以的哦

热门文章

  1. html5圆盘抽奖,HTML5 Canvas圆盘抽奖运用DEMO
  2. FFmpeg学习(5)——视频加水印
  3. objenesis的基本使用方法
  4. 矩阵运算_SLAM中用到的矩阵计算_基本公式及知识汇总
  5. ORB-SLAM3 一张图梳理rgbd_tum.cc主流程
  6. OpenCV_Camera Calibration and Rectification under QT creator( 相机标定及矫正 | QT creator环境 )
  7. cartographer探秘第四章之代码解析(八) --- 生成地图
  8. 眼底图像血管增强与分割--(1)匹配滤波算法原理及实现
  9. node.js(五)项目创建管理
  10. 网络架构设计:CNN based和Transformer based