Java 网络编程 之 TCP协议

TCP协议 (服务器端程先启动,等待客户端连接)

TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据

保证传输数据的全性安,文件数据不易丢失

在JDK中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个是Socket类,用于表示客户端。

首先创建代表服务器端的ServerSocket对象,并等待客户端的连接,

然后创建代表客户端的Socket对象向服务器端发出连接请求,服务器端响应请求,客户端再次向服务器端发送确认信息,确认连接

public class TCPClient {//客户端

public static void main(String[] args) throws IOException {

Socket socket=new Socket("127.0.0.1",8888);//客户端对象 建连接

//Socket socket=new Socket(inet,8888);//(地址对象,端口号)

OutputStream out=socket.getOutputStream();//客户端的 输出流

//写数据

Scanner sc=new Scanner(System.in);

String str=sc.nextLine();

out.write(str.getBytes());

//明确数据源

FileInputStream fis=new FileInputStream("F:\\java\\1.jpg");

//BufferedInputStream bis = new BufferedInputStream(fis);

//写数据

int len=0;

byte[] bytes=new byte[1024];

while((len=fis.read(bytes))!=-1){ //bis.read(bytes)

out.write(bytes,0,len); //写入 socket的 输出流

}

socket.shutdownOutput();//socket对象 的输出流 写入结束符

//接收服务器端的响应

InputStream in=socket.getInputStream();

byte[] bytes=new byte[1024];

int len=in.read(bytes);

System.out.println(new String(bytes,0,len));

socket.close();//释放内存

fis.close();//关闭数据源

}

}

int port=socket.getPort();//获取端口号

InetAddress inet=getLocalAddress();//获取本地地址对象

public class TCPServer {//服务器端

public static void main(String[] args) throws IOException {

ServerSocket server=new ServerSocket(8888);//服务端对象(端口号)

Socket socket=server.accept();//创建连接  获取客户端对象

InputStream in=socket.getInputStream();//客户端的 输入流  不关

//读出数据

byte[] bytes=new byte[1024];

int len=in.read(bytes);

System.out.println(new String(bytes,0,len));

//明确目的地

File file=new File("F:\\aaa");

if(!file.exists()){ file.mkdirs(); }//文件夹不存在  创建

String fn="oracle"+System.currentTimeMillis()//域名+毫秒值

          +new Random().nextInt(999999)+".jpg";//+六位随机数+后缀

FileOutputStream fos=new FileOutputStream(file+File.separator+fn);

//BufferedOutputStream bos = new BufferedOutputStream(fos);

//开始复制

byte[] bytes=new byte[1024];

int len=0;

while((len=in.read(bytes))!=-1){

fos.write(bytes,0,len); //bos.write(bytes,0,len);

}

//发送给客户端响应

OutputStream out=socket.getOutputStream();//输出流

Scanner sc=new Scanner(System.in);

String str=sc.nextLine();

out.write(str.getBytes());//写数据

out.write("上传成功".getBytes());//写数据

server.close();//释放资源

fos.close(); //bos.close();

}

}

InetAddress address = socket.getInetAddress();//获取地址对象

String ip=address.getHostAddress(); //ip地址

String name=address.getHostName(); //主机名

System.out.println("来自IP:"+ip+"主机名:"+name);

多线程(多人同时访问服务器)
public class Upload implements Runnable{
    private Socket socket;
    public Upload(){}
    public Upload(Socket socket){this.socket=socket;}
    public void run() {
        FileOutputStream fos=null;
        try{
        InputStream in=socket.getInputStream();//客户端 输入流
        //明确目的地
        File file=new File("F:\\aaa");
        if(!file.exists()){ file.mkdirs(); }//文件夹不存在  创建
        String filename="oracle"+System.currentTimeMillis()//域名+毫秒值
                    +new Random().nextInt(999999)+".jpg";//+六位随机数+后缀
        fos=new FileOutputStream(file+File.separator+filename);
        //开始复制
        byte[] bytes=new byte[1024];
        int len=0;
        while((len=in.read(bytes))!=-1){fos.write(bytes,0,len);}
        //发送给客户端响应
        OutputStream out=socket.getOutputStream();//输出流
        out.write("上传成功".getBytes());//写数据
        }catch(IOException ex){ex.printStackTrace();}
     finally{ if(fos!=null){fos.close();//点try...catch} }
    }
}       

public class TCPThreadServer {//服务器端 多线程  (客户端不变)
    public static void main(String[] args) throws IOException {
        ServerSocket server=new ServerSocket(8888);//服务端对象(端口号)
        while(true){
            Socket socket=server.accept();//创建连接  获取客户端对象             new Thread(new Upload(socket)).start();//创建并开启线程
        }
    }
}

原文地址:https://www.cnblogs.com/javscr/p/10252744.html

时间: 2024-11-08 11:59:00

Java 网络编程 之 TCP协议的相关文章

Java网络编程(tcp在服务器上应用多线程)

package org.tcp; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; public class EchoThread implements Runnable { private Socket client = null; public EchoThread(Socket client){ this.c

C#网络编程之---TCP协议的同步通信(二)

上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的传送与接收 先把服务端与客户端的连接代码敲出来 服务端 IPAddress ip = new IPAddress(new byte[] { 127, 1, 1, 1 }); TcpListener server = new TcpListener(ip, 8005); server.Start();

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

Java网络编程(TCP/UDP)

首先我们先了解一下计算机网络的基本知识. 什么是网络? 将不同区域的计算机连接到一起.按照区域的大小可分为局域网,城域网,广域网(互联网). 地址即IP地址,确定在网络上的一个绝对地址. 端口号:区分计算机上的软件, 占用两个字节 ,端口号范围为: 0-65535, 一共65536个端口号. 1. 在同一个协议下端口号不能重复,不同的协议可以重复 2. 1024以下的端口号尽量不要使用.有可能已被占用,如80–http 21–ftp **资源定位:**URL 统一资源定位符 URI:统一资源 数

网络编程UDP/TCP协议

一.网络编程三要素 IP:网络中设备的标识,不易记忆,可用主机名 端口号:用于标识进程的逻辑地址,不同进程的标识 传输协议:通讯的规则常见协议:TCP,UDP UDP 把数据打成一个数据包 , 不需要建立连接 数据包的大小有限制不能超过64k 因为无连接,所以属于不可靠协议(可能丢失数据) 因为无连接 ,所以效率高 TCP 需要建立连接,形成连接通道 数据可以使用连接通道直接进行传输,无大小限制 因为有链接,所以属于可靠协议 因为有链接,所以效率低 二.IP以及端口号 1.InetAddress

java 网络编程 UDP TCP

网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: 就是要基于html页面的基础上进行数据的交互的. 比如: 珍爱网. oa(办公自动化). 高考的报告系统... 计算机网络: 分布在不同地域 的计算机通过外部设备链接起来达到了消息互通.资源共享的效果就称作为一个计算机网络.网络通讯的三要素:    1. IP    2. 端口号.    3. 协

java 网络编程(Socket) TCP/UDP 总结案例

网络编程:关注的是底层的数据传输 网页编程:数据的展示 1.基本概念 一.网络:将不同的计算机连接在一起局域网 城域网 互联网 二.地址:Ip地址确定网络上的绝对的地址位置   房子的地址 三.端口号(相当于房门):区分计算机上的软件 相当于房门两个字节0~65535 共65536个 1. 同一个协议下,端口号不能重复,不同的协议下可以重复 2. 1024以下的端口不要使用 80-->http 21-->ftp 四.资源定位 URL 统一资源定位 URI:统一资源 五.数据的传输 1. 协议:

C#网络编程之--TCP协议(一)

TCP 是面向连接的传输协议 面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的 TCP 是全双工的传输协议 全双工,这个理解起来也很简单,A打电话给B,B接听电话,那么A可以说话给B听,同样B也可以给A说话,不可能只允许一个人说话. TCP 是点对点的 点对点,这个看了上面的举例相比大家都知道了,还要说一点的是,如果在A和B打电话过程中,B又来了一个紧急电话,那么B就要将与A的通话进行通话保持,所以不管怎么讲同一个连接只能是点对点的,不能一对多. TCP