Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java实现最基础的socket网络通信

java实现最基础的socket网络通信

作者头像
用户1215536
发布于 2018-02-05 07:15:25
发布于 2018-02-05 07:15:25
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

一、网络通信基础

网络中存在很多的通信实体,每一个通信实体都有一个标识符就是IP地址。

而现实中每一个网络实体可以和多个通信程序同时进行网络通信,这就需要使用端口号进行区分。

二、java中的基本网络支持

1、IP地址使用InetAddress类来表示。

     获取InetAddress实例的两个方法为:

    (1)getByName(String host)    根据主机获取对应的InetAddress对象

    (2)getByAddress(byte[] addr)根据IP地址获取InetAddress对象

2、InetAddress提供了三个方法来获取InetAddress实例对应的IP地址和主机名

    (1)String getCanonicalHostName()获取此IP地址的权限定域名

    (2)String getHostAddress()获取InetAddress实例对应的IP地址

    (3)String getHostName()获取此IP地址的主机名

此外InetAddress类使用getLocalHost()方法获取本机IP地址对应的InetAddress实例,使用isReachable()方法测试是否可以到达该地址。

三、java实现简单的TCP/IP通信

服务器端使用ServerSocket创建TCP服务器,使用accept()进行监听,如果接收到客户端请求则返回一个与客户端对应的Socket,否则处于等待状态。

客户端根据服务器的IP,连接服务器。

服务器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.net.*;
import java.io.*;
/**
手机端代码
手机端作为服务器,获取自己的ip地址,并显示以供客户端连接
*/
public class phone_Server
{
    public static void main(String[] args)
        throws IOException
    {
        //打印本机的IP地址
        InetAddress address=InetAddress.getLocalHost();
        System.out.println("本机的IP地址是"+address.getHostAddress());
        // 创建一个ServerSocket,用于监听客户端Socket的连接请求
        ServerSocket ss = new ServerSocket(30000);
        // 采用循环不断接受来自客户端的请求
        while (true)
        {
            // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
            Socket s = ss.accept();
            // 将Socket对应的输出流包装成PrintStream
            PrintStream ps = new PrintStream(s.getOutputStream());
            // 进行普通IO操作
            ps.println("您好,您收到了服务器的新年祝福!");
            // 关闭输出流,关闭Socket
            ps.close();
            s.close();
        }
    }
}

客户端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
PC端代码
PC作为客户端,根据服务器的IP地址和端口号连接服务器
*/
import java.net.*;
import java.io.*;

public class PC_Client
{
    public static void main(String[] args)
        throws IOException
    {
        //Socket socket = new Socket("127.0.0.1" , 30000);
        Socket socket = new Socket("192.168.47.1" , 30000);//这里的IP地址填写手机端服务器的IP地址
        // 将Socket对应的输入流包装成BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        // 进行普通IO操作
        String line = br.readLine();
        System.out.println("来自服务器的数据:" + line);
        // 关闭输入流、socket
        br.close();
        socket.close();
    }
}

  补充一点socket传输大数据的内容

由于socket单次传输的数量是有一定的限制的,所以应该分批次传输和接受

可以写成这样:

传输

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                int start=0;
                while((start+1024)<data.length)
                {
                    out.write(data, start,1024);
                    start=start+1024;
                }
                if(start<data.length)
                {
                    out.write(data, start,(data.length-start+1));
                }
                //String str = new String(data);
                //out.writeUTF(str);
            }catch (Exception e) {
                Log.d(TAG, "文件传输异常");
            }

接受

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        DataInputStream input = new DataInputStream(socket.getInputStream());
        byte []buf=new byte[1024];
        int readnum=0;
        while(true)
        {
            readnum=input.read(buf); 
            if(readnum>0)
            {
                System.out.println(Arrays.toString(buf));

                while((readnum=input.read(buf))>0)
                {
                    System.out.println(Arrays.toString(buf));
                }
            }
        }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java网络编程:TCP的socket编程
协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。
全栈程序员站长
2022/09/08
7110
Java入门(18)-- 网络通信
计算机网络实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。
爱学习的程序媛
2022/04/07
7440
Java入门(18)-- 网络通信
Java之网络编程笔记
  IP地址:用于标记一台计算机的身份证。 IP地址由网络地址(确定网络)和主机地址(网络中的主机)组成。
shirayner
2018/08/10
5920
Android网络 | Socket(Eclipse--Java)
在获取时使用方法readFromClient()来读取客户端数据。 如果读取数据过程中捕获到 IOException异常, 则说明此Socket对应的客户端Socket出现了问题, 程序就会将此Socket从socketList中删除。
凌川江雪
2019/12/16
1K0
Android网络 | Socket(Eclipse--Java)
Java Review(三十八、网络编程)
计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。
三分恶
2020/07/16
9600
Java-网络编程
哈喽!大家好,我是小简。今天开始学习《Java-网络编程》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
4930
Java-网络编程
Socket通信
OSI是一个理想的模型,一般的网络系统只涉及其中的几层,在七层模型中,每一层都提供一个特殊 的网络功能,从网络功能角度观察:
小小工匠
2021/08/16
9550
Java Socket编程——通信是这样炼成的
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。
Java团长
2018/08/06
6070
Java 网络编程详解
TCP/IP (Transmission Control Protocol/Internet Protocol) 的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是lnternet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。
timerring
2023/05/11
8850
Java 网络编程详解
17:网络编程
第一  概述 一、概述: 1、网络模型:OSI参考模型和TCP/IP参考模型 2、网络通讯要素: 1)IP地址:InetAddress    .网络中设备的标识    .不易记忆,可用主机名 Int
六月的雨
2018/05/14
6960
Java 网络实例的demo
以下实例演示了如何使用 InetAddress 类的 InetAddress.getByName() 方法来获取指定主机(网址)的IP地址:
默 语
2024/11/20
1240
WIFI环境下Android手机和电脑通信
前面已经写过一篇java实现最基础的socket网络通信,这篇和之前那篇大同小异,只是将客户端代码移植到手机中,然后获取本机IP的方法略有不同。 先讲一下本篇中用到Android studio的使用吧
用户1215536
2018/02/05
1.9K0
WIFI环境下Android手机和电脑通信
Socket编程
Java中的java.net包提供了网络通信的各种实现,如果我们要使两台计算机间通过网络来交换数据,那么中间就需要有连接才可进行,而net包中Socket对象就担任连接这个的角色,net包提供了两种常见的网络协议支持:
晚上没宵夜
2020/10/28
9670
网络编程笔记
先运行Demo2_Receive,再运行Demo2_Send,运行Demo2_Send发送消息能在另一个创建口接收到。
砖业洋__
2023/05/06
2470
网络编程笔记
系统学习javaweb-05-网络编程
1 InetAddress InetAddress(IP类) 常用方法 —-getLocalHost() 获取本机的IP地址对象 —-getByName(“IP或者主机名”) 根据IP地址的字符串或主机名生成IP地址对象(用于获取别人的IP地址对象) ——–getHostAddress() 返回IP地址的字符串 ——–getHostName() 返回计算机的主机名 public class test { public static void main(
csxiaoyao
2019/02/20
3160
java基础(十二):网络编程
计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准
Vincent-yuan
2020/06/16
5520
JAVA网络编程知识学习
两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。
大忽悠爱学习
2022/05/06
6690
JAVA网络编程知识学习
Java从入门到精通十三(java网络编程)
前言:不在本文中详细说明网络通信(具体的准备有时间开一个网络专栏,具体按照Cisco Packet进行实验模拟说明。)
兰舟千帆
2022/07/16
2K0
Java从入门到精通十三(java网络编程)
JavaSocket应用
InetAdress类 InetAdress类:没有构造方法,不能new一个对象 InetAddress类用于标示网络上的硬件资源,表示互联网协议(IP)地址 获取本机的InetAddress实例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static void main(String[] args) throws UnknownHostException { InetAddress ia = InetAddress.getLoc
待你如初见
2018/08/02
8800
JAVA网络编程TCP通信
Socket称为“套接字”,描述IP地址和端口。在Internet上的主机一般运行多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定在一个端口上,不同的端口对应于不同的服务。Socket和ServerSocket类位于java.net包中。ServerSocket用于服务端,Socket是建立网络连接时使用的。连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例完成所需会话。
HUC思梦
2020/09/03
9430
JAVA网络编程TCP通信
相关推荐
Java网络编程:TCP的socket编程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验