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 ...
随机推荐
- 【C#】Winform嵌入dll到exe中
[C#]Winform嵌入dll到exe中 零.问题 最近在做一个上位机,需要保存数据,所以引用了一些Excel的组件,但是比较麻烦的是会多出几个DLL文件,压缩打包不方便使用,于是想能不能嵌入到ex ...
- 请运行命令来卸载Oracle主目录
卸载Oracle数据库碰见的一个不一样的操作,留爪. 正常点的软件卸载直接点卸载即可, Oracle 卸载非要来点不一样警告, 如图: 注意:不要被图里的斜杠符号忽略了,准确的应该是: # 注意斜杠 ...
- 条件锁存在的意义:用生活中的例子秒懂线程间的"暗号系统"
条件锁存在的意义:用生活中的例子秒懂线程间的"暗号系统" 引子: 在学习linux下c语言中的互斥锁和条件锁的时候,我的大脑哦逻辑进入了"条件锁到底锁了什么"的 ...
- Robot Framework自定义关键字
需求分析: 如下图,诸多步骤中可能共用某些共同的步骤,比如都需要登录会员 此,可以把登录的操作写成模块化,插入其他脚本供其他脚本调用,如此可以节省不少脚本量 上图为会员登录的操作. 具体实施如下: 1 ...
- Vue横向滚动鼠标控制
let level_cards // 标记可移动 , move_start // 移动初始的x位置 , move_x // 移动初始的容器偏移量 , move_scroll_left // 判断是否为 ...
- K8s容器运行时,移除Dockershim后存在哪些疑惑?
K8s容器运行时,移除Dockershim后存在哪些疑惑? 大家好,我是秋意零. K8s版本截止目前(24/09)已经发布到了1.31.x版本.早在K8s版本从1.24.x起(22/05),默认的容器 ...
- 解决 Dify 部署中 Podman WSL 容器文件权限问题
解决 Dify 部署中 Podman WSL 容器文件权限问题 在使用 Podman 进行 Dify 部署时,遇到了一个关键问题:启动服务时出现 initdb: error: could not ch ...
- Java 原生异步编程与Spring 异步编程 详解
简介 Java 异步编程是现代高性能应用开发的核心技术之一,它允许程序在执行耗时操作(如网络请求.文件 IO)时不必阻塞主线程,从而提高系统吞吐量和响应性. 异步 vs 同步 同步:任务按顺序执行,后 ...
- 网络编程:C10K问题
C10K问题 C10K问题就是如何一台物理机上同时服务10000个用户?C代表并发,10K就是10000 C10K 问题是由一个叫 Dan Kegel 的工程师提出并总结归纳的,你可以通过访问http ...
- codeup之C语言11.1 + C语言11.2 + C语言11.4 + 11.7 + C语言11.8(结构体
讲真,这几道题可以不做,顶多可以注意下结构体和联合体的区别 Description 完成一个对候选人得票的统计程序.假设有3个候选人,名字分别为Li,Zhang和Fun.使用结构体存储每一个候选人的名 ...