TCP入门简单例子
TCP的简单例子
TCP最简单聊天室
客户端
连接服务器 Socket
发送消息
package TCP; import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner; //客户端
public class TcpClientZx01 {
public static void main(String[] args) {
Socket socket=null;
OutputStream os=null;
Scanner sc=null; //1.要知道服务端的地址
try {
InetAddress serverIp= InetAddress.getByName("127.0.0.1");
int port=9090; //2.建立一个socket连接
socket=new Socket(serverIp,port);
os= socket.getOutputStream();
sc=new Scanner(System.in);
System.out.println("进入聊天室和邓聊天");
System.out.println("1为发送");
String e="";
while(!e.equals("1")){
e=sc.next();
os.write(e.getBytes()); } } catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(os!=null){
os.close();
}
if(socket!=null){
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务端
建立服务的端口 ServerSocket
等待用户的连接 accept(等待监听)
接受用户的消息
public class TcpServerZx01 {
//服务端
public static void main(String[] args) {
ServerSocket serverSocket=null;
Socket accept=null;
InputStream is=null;
ByteArrayOutputStream baos=null; try {
//1.我得有一个地址
serverSocket=new ServerSocket(9090);
while(true) {
//监听客户端发过来的数据
accept=serverSocket.accept();
//2.读取客户端的数据
is=accept.getInputStream();
//管道流
baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
baos.write(buf, 0, len);
} System.out.printf(baos.toString());
} } catch (IOException e) {
e.printStackTrace();
}finally{
if(baos!=null) {
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(is!=null) {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(accept!=null) {
try {
accept.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(serverSocket!=null) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
}
TCP最简单文件上传
文件上传:其实就是IO流,把资源转换成流,读取给出
客户端
public class FileTop {
public static void main(String[] args) throws UnknownHostException, IOException {
//1.创建一个Socket连接
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9999);
//2.创建一个输出流
OutputStream os=socket.getOutputStream();
//3.读取文件
FileInputStream fis = new FileInputStream(new File("img_7.jpg"));
//4.写出文件
byte[] buffer=new byte[1024];//这些都是固定代码,如果明确文件大小,可以不声明1024,避免资源浪费
int len;
while((len=fis.read(buffer))!=-1) {
os.write(buffer,0,len);
}
//通知服务器,我已经传输完了
socket.shutdownOutput();
//确定服务器接受完毕才能断开连接
InputStream is = socket.getInputStream();
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] buffer2=new byte[1024];
int len2;
while((len2=is.read(buffer2))!=-1){
baos.write(buffer2,0,len2);
}
System.out.println(baos.toString());
//关闭资源,规则都遵循先写后关
baos.close();
is.close();
fis.close();
os.close();
socket.close();
}
}
服务端
public class FileDown {
public static void main(String[] args) throws IOException {
//1.创建服务
ServerSocket serverSocket = new ServerSocket(9999);
//2.监听客户端的连接
Socket socket=serverSocket.accept();//监听,会一直等待客户连接
//3.获取输入流
InputStream is=socket.getInputStream();
//4.文件输出
FileOutputStream fos=new FileOutputStream(new File("reactiv.jpg"));
byte[] buffer=new byte[1024];
int len;
while((len=is.read(buffer))!=-1) {
fos.write(buffer,0,len);
}
//通知客户端接收完毕了
OutputStream os=socket.getOutputStream();
os.write("我接受完毕了".getBytes());
//5.关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}
TCP入门简单例子的更多相关文章
- QT编写TCP入门+简单的实际项目(附源程序)
我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...
- boost库asio详解8——几个TCP的简单例子
摘于boost官网的几个例子, 做了点小修改, 笔记之. 同步客户端 void test_asio_synclient() { typedef boost::asio::io_service IoSe ...
- Java_Activiti5_菜鸟也来学Activiti5工作流_之入门简单例子(一)
// VacationRequest.java /** * author : 冯孟活 ^_^ * dates : 2015年9月1日 下午10:32:58 * class : 演示简单的公司请假流程 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- CANoe 入门 Step by step系列(三)简单例子的剖析【转】
最好的学习方式是什么?模仿.有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段.正所谓画虎画皮难画骨. ...
- 【转载】CANoe 入门 Step by step系列(三)简单例子的剖析
来源:http://www.cnblogs.com/dongdonghuihui/archive/2012/09/26/2704623.html 最好的学习方式是什么?模仿.有人会问,那不是山寨么?但 ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...
随机推荐
- 1001: 【编程入门】A+B 输入输出练习I
1001: [编程入门]A+B 输入输出练习I[https://www.cyccfoj.com/problem.php?id=1001] ''' 题目描述 你的任务是计算a+b.这是为了acm初学者专 ...
- 请求的资源不支持 http 方法“GET”。
错误重现 js ajax调用一个ASP.NET MVC写的api时,一直出现错误信息请求的资源不支持 http 方法"GET". 错误原因 ASP.NET MVC中的MVC(Web ...
- FireDAC开发DataSnap应用系统【2】-使用TFDJSONDatasets功能
类别 说明 TFDJSONDatasets FireDAC使用JSONDataSet,其中可包括多个DataSet对象 TFDJSONDataSetsWriter 把TDataSet写入TFDJSON ...
- 在Winform开发框架支持多种数据库基础上,增加对国产数据库人大金仓的支持
一个良好的产品,可能往往需要支持多种数据库的接入,根据实际业务的需要进行调整,有时候可能需要2到3种数据库的支持. 在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统 ...
- EvoSuite使用总结
1.安装EvoSuite插件 以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生 ...
- 在web.xml下配置springmvc的核心控制器
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" ...
- 根据返回值,判断是否执行下一步的方法(Run Keyword And Return Status指令的使用)
场景分析: 上图"通用模版测试"内容 满足,如果当前页面存在这条数据,即结束执行本条用例,自动执行下一条.如果没有,则调用新建模版关键字,执行新建模版. 脚本如下 1配置运费模版 ...
- ZeroTier 穿透ZeroNSD Quickstart
Create a ZeroTier Network# You may do this manually through the ZeroTier Central WebUI, Install Zero ...
- 话说神奇的content="IE=edge,chrome=1"的meta标签内容
这是个是IE8的专用标记,用来指定IE8浏览器去模拟某个特定版本的IE浏览器的渲染方式(比如人见人烦的IE6),以此来解决部分兼容问题,例如模拟IE7的具体方式如下: < meta http-e ...
- MVVM绑定 填坑,必须在与 DependencyObject 相同的线程上创建 DependencySource
场景:线程里面构建MVVM实体类,实体类包含 Brush 属性时,构建 SolidColorBrush 需要UI线程,否则会报 "必须在与 DependencyObject 相同的线程上创建 ...