package com.pers.tcptest;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; import org.junit.Test; public class TCPTest { @Test// 客户端
public void client() {
Socket socket = null;
Scanner scanner = null;
OutputStream os = null;
InputStream is = null;
try {
socket = new Socket(InetAddress.getByName("127.0.0.1"), );
// 输出流 程序到数据 write
os = socket.getOutputStream();
System.out.println("请输入多个字符:");
// 封装键盘输入流
scanner = new Scanner(System.in);
String str = scanner.next();
os.write(str.getBytes());//发送出去
//必须加上 表示我这边发送结束 服务端可以read去循环读取了 交互性
socket.shutdownOutput();
// 输入流 把数据读到程序中 显示出来
is = socket.getInputStream();
byte[] b = new byte[];
int len;
while ((len = is.read(b)) != -) {
String str2 = new String(b, , len);
System.out.println(str2);// str2是读取到的所有信息内容
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 一定记得把稀缺的流资源关闭,一旦上面报错 关闭流 判断是否为null 避免还没创建流呢 就执行关闭 造成空指针异常
if (is != null) {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} try {
if (os != null) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (scanner != null)
scanner.close();
try {
if (socket != null) {
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } @Test// 服务端
public void server() {
ServerSocket ss = null;
Socket socket = null;
// 接受来自客户端的信息
InputStream is = null;
// 返回给客户端信息
OutputStream os = null;
try {
ss = new ServerSocket();
socket = ss.accept();
// 接受来自客户端的信息
is = socket.getInputStream();
byte[] b = new byte[];//输入 就要 考虑接收一下读过来的字节数据
int len;
String str = new String();
while ((len = is.read(b)) != -) {//考虑多余10个字节的数据 一次读取不完 分批次放到str中
String str2 = new String(b, , len);
str += str2;
System.out.println("服务端接收过来的信息是:"+str);
}
// 返回给客户端大写的串信息
os = socket.getOutputStream();
os.write(str.toUpperCase().getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
ss.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
----------------------------------运行结果 先执行服务端 再执行客户端
客户端
请输入多个字符:
hdhaihdoihio (点击回车,服务端接收转为大写之后再发送给客户端)
HDHAIHDOIH (因为一次读取10个字节 所以分两次读完的)
IO
服务端
服务端接收过来的信息是:hdhaihdoih
服务端接收过来的信息是:io

课余之外  可以去了解两个东东  如下:

简单的tcp聊天的更多相关文章

  1. Netty学习——基于netty实现简单的客户端聊天小程序

    Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...

  2. hello/hi的简单的网络聊天程序

    hello/hi的简单的网络聊天程序 0 Linux Socket API Berkeley套接字接口,一个应用程序接口(API),使用一个Internet套接字的概念,使主机间或者一台计算机上的进程 ...

  3. 以您熟悉的编程语言为例完成一个hello/hi的简单的网络聊天程序

    Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,应用程序通常通过"套接字"向网络发出 ...

  4. C# Socket编程实现简单的局域网聊天器

    目录 前言 编码 服务端监听接口 客户端连接接口 文字发送接口 文件发送接口 信息接收接口(文字与文件) 使用 注意事项 源码 前言 最近在学习C# Socket相关的知识,学习之余,动手做了一个简单 ...

  5. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  6. Mina、Netty、Twisted一起学(一):实现简单的TCP服务器

    MINA.Netty.Twisted为什么放在一起学习?首先,不妨先分别看一下它们官方网站对其的介绍: MINA: Apache MINA is a network application frame ...

  7. Unity3D 实现简单的语音聊天 [iOS版本]

    现在很多手机游戏中的聊天系统都加入语音聊天的功能,相比于传统的文字聊天,语音聊天在MMORPG中显得尤为重要,毕竟直接口头交流总比你码字快得多了,也更直观些. 实现语音聊天的方法很多,U3D中有不少第 ...

  8. 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

    基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于S ...

  9. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

随机推荐

  1. Java中使用正则表达式获取网页中所有图片的路径

    public static List<String> getImageSrc(String htmlCode) { List<String> imageSrcList = ne ...

  2. 监听Listview的滚动状态,是否滚动到了顶部或底部

    /** * @author:Jack Tony * @description : 监听listview的滑动状态,如果到了顶部就刷新数据 * @date :2015年2月9日 */ private c ...

  3. 分享到微信、微博、QQ空间、QQ微博

    一:分享到微信 //分享到微信$("#weixin").bind("click", function () {    var p = {        url: ...

  4. RAISR: rapid and accurate image super resolution

      准确地说,RAISR并不是用来压缩图像的,而是用来upsample图像的. 众所周知,图片缩小到半分辨率后,在拉回原大小,会出现强烈的锯齿.从80年代开始就有很多super sampling的方法 ...

  5. AsyncHttpClient的连接池使用逻辑

    AsyncHttpClient的连接池结构很简单, NettyConnectionsPool内部重要的几个变量如下 // 连接池, 通过 host 区分不同的池 private final Concu ...

  6. 样条之EHMT插值函数

    核心代码: ////////////////////////////////////////////////////////////////////// // 埃特金插值 ////////////// ...

  7. jstorm简介

    最近在研究jstorm,看了很多资料,所以也想分享出来一些. 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2 ...

  8. IIS Web服务扩展中没有Asp.net 2.0

    服务器上安装了ASP.NET v2.0组件,但是在IIS的Web服务扩展中并没有找到ASP.NET v2.050727这项,这导致基于.NET2.0开发的网页都无法正常浏览. 解决方法:打开IIS,转 ...

  9. 如何移除EFI system partition?

    莫名其妙, 在我的服务器上出现了这样一种分区, 上面写着EFI system, 删也删不掉, 因为删除分区的菜单是灰掉的. 找到了这篇文章, 成功的删掉了这个烦人的分区. 整个过程记录如下:   参考 ...

  10. linux下elasticsearch 安装、配置及示例

    简介 开始学es,我习惯边学边记,总结出现的问题和解决方法.本文是在两台linux虚拟机下,安装了三个节点.本次搭建es同时实践了两种模式——单机模式和分布式模式.条件允许的话,可以在多台机器上配置e ...