使用Socket进行通信

网络通信学习笔记之 ———Socket网络通信 简单介绍了基于TCP协议的Socket网络通信和基于UDP协议的Socket网路通信 阅读详情

Socket提供两个构造器:

  1. Socket(InetAddress/String remoteAddress,int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统分配的端口。
  2. Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):创建连接到指定远程主机、远程端口的Socket,并指定本地地址、本地端口,适用于本地主机有多个IP地址的情形。

 

服务器端程序:

SimpleServer.java

import java.net.*;
import java.io.*;

public class SimpleServer
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("Start s!!!");//通过添加多条输出语句,在控制台打印提示信息
		//创建一个ServerSocket,用于监听客户端Socket的连接请求
		ServerSocket ss = new ServerSocket(36000);
		//采用循环不断接收来自客户端的请求
		while(true)
		{
			System.out.println("Start!!!");
			//每当接收到客户端socket的请求时,服务器端也对应产生一个Socket
			Socket s = ss.accept();
			System.out.println("连接成功!!!");
			OutputStream os = s.getOutputStream();
			os.write("您好,圣诞节快乐!\n"
			     .getBytes("utf-8"));
			//关闭输出流,关闭Socket
			os.close();
			s.close();
		}
	}
}

 

客户端程序:

MainActivity.java

package com.example.administrator.model;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class MainActivity extends Activity
{
    EditText show;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (EditText) findViewById(R.id.show);
        new Thread()
        {
            @Override
            public void run()
            {
                try
                {
                    // 建立连接到远程服务器的Socket,创建连接到IP地址为192.168.7.38、端口为36000的Socket
                    Socket socket = new Socket("192.168.7.38" , 36000);
                    //设置10秒之后即认为是超时
                    socket.setSoTimeout(10000);
                    // 将Socket对应的输入流包装成BufferedReader
                    BufferedReader br = new BufferedReader(
                      new InputStreamReader(socket.getInputStream()));
                    // 进行普通I/O操作
                    String line = br.readLine();
                    show.setText("来自服务器的数据:" + line);
                    // 关闭输入流、socket
                    br.close();
                    socket.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

 

页面布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:singleLine="false"
        android:inputType="text"
        android:hint="@null"
        />
</LinearLayout>

 

清单文件AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.model" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <!--  授权访问互联网-->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

 

注:在清单文件中增加了配置片段<uses-permission android:name="android.permission.INTERNET"/>,因为Android应用需要访问互联网,所以为该应用赋予访问互联网的权限。

 

运行SimpleServer类,可以看到服务器一直处于等待状态,等待来自客户端的请求。

再运行客户端,将看到程序输出:“来自服务器的数据:您好,圣诞节快乐!”。表示客户端和服务器连接成功,ServerSocket和Socket建立连接并通过IO流进行通信。

 

 

 

 

如果没有得到这个结果,可以排查一下是不是防火墙的原因,如需要可以关闭防火墙。

提醒:若是程序结果不是很清晰,可以选择添加几条打印语句或输出语句的方法,使得可以清晰地看出程序进行到了哪一步。

 

 

 

 

 

 

 

Socket编程:C语言使用socket进行本地进程间通信、网络通信 本文详细介绍了Socket在C语言编程中,进行本地进程间通信、网络设备间通信的多种用法 阅读详情

相关推荐

c++ 将socket使用封装成类,实现socket通信

最近简单的整理了一下socket的使用,可能存在某些问题,望指出,谢谢。 SocketConnect.h #ifndef _SOCKETCONNECT_H_ #define _SOCKETCONNECT_H_ #include <WinSock2.h> #include<string> class SocketConnet { public: SocketConne...

c1149884598的博客 3631

linux之防火墙

一,何为防火墙 是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。后来这个词语引入到了网络中,把从外向内的网络入侵行为看做是火灾,防止这种入侵的策略叫做防火墙 二,防火墙分类 1.从构造上分类 硬件防火墙: 深信服,联想的网御,华为 软件防火墙 个人防火墙 定义:个人防火墙运行在 PC 上,用于监控 PC 和外网的通信信息 如windows自带的防火墙 网关防火墙 定义:在网络中的网关上配置防火墙的功能,能对网络中的流量进行策略控制,这就是网关防火墙 软件网关防火墙:如li.

笨笨的博客 8047

UDP协议详解——使用Socket通信

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号。它没有握手对话,因此将用户的程序暴露在底层网络的任何不可靠的方面。

qq_3517289697的博客 3385

局域网的socket通讯与防火墙

  局域网的socket通讯与防火墙   昨天同事写了一个socket通讯程序。很简单,server端在7000端口监听,client端连接后,server向client发送一个字符串,client在收到该字符串后,再向server反馈一个消息。整个通讯过程结束。    Server和client在同一台机器时,整个通讯过程能够很顺利的完成。问题是,server和client在不同的机

peteryxk的专栏 6482

Python使用Socket 进行进程间通信

毫无关系的两个进程要通信,使用socket是比较稳妥的方法。Socket 进程间通信主要分为 Client 端和 Server 端。Server 端主要是监听 socket请求,而 Client 端主要是发送请求,等待 Server 端的回复。 Server 端: 首先需要 socket 库: import socket Instantiate 一个 socket 实例:sock = s

Paul_ss的专栏 3382

在C#中使用Socket通信

文章按照 Socket 的 创建、连接、传输数据、释放资源的过程来写。给出方法、参数的详细信息。

仰望星空的博客 5182

java socket 防火墙_关于socket接口和防火墙问题

展开全部可以使用e68a843231313335323631343130323136353331333238656663Java程序做Socket通信。1.简单服务器端/*import java.net.*;import java.io.*;*/ServerSocket server=null;try {server=new ServerSocket(%%1);}catch(Exception e...

weixin_32349711的博客 683

STM32踩坑--NoST-LINK detected

这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ...

qq_53002477的博客 2万+

Linux的SOCKET编程

1. 网络中进程之间如何通信 进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal) UNIX system V有:消息(message)、共享存储区(shared mem...

qq_37933895的博客 860

流媒体协议-RTMP简介

与rtsp 不同,RTSP(Real-Time Streaming Protocol)是一个控制协议,负责控制媒体流的传输,但不传输媒体数据本身。RTSP 可以通过 TCP 或 UDP 传输 RTP 包来传输音视频数据。 RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制

xiaoshuaijinniu的博客 4550

【C++/嵌入式梳理】bootloader

【C++/嵌入式笔试面试八股】bootloader

Hi 1210

Socket介绍及使用Java实现socket通信

使用Java实现socket通信。

weixin_49561506的博客 2万+

电子硬件仿真:设计一个频率范围为10k—50k的带通滤波器

带通滤波器是一种常用的滤波器类型,具有选择特定频率范围内信号的能力,并在该范围内提供一定的增益。它允许通过一定范围内的频率信号,并在该范围内提供一定的增益,同时在该范围之外的频率上提供较高的衰减。这意味着在通带内(10kHz至50kHz),滤波器的增益应为10dB,而在每个十倍频的频率点上,滤波器的增益应降低40dB。设计滤波器:使用滤波器设计工具(如MATLAB、Python的scipy库、Tina软件等),根据选定的滤波器类型(例如巴特沃斯滤波器),中心频率和通带宽度,设计一个4阶带通滤波器。

走向CTO的路上... 579

Socket的通信原理和使用

目录 一、什么是 Socket? 二、Socket 通信过程 2.1 通信过程介绍 2.2 实现TCP建立连接的三次握手过程 三、 使用Socket进行通信【php】 3.1 PHP中Socket常量和函数介绍 3.2 php实现Socket通信过程 一、什么是 Socket? Socket 的中文翻译过来就是“套接字”。套接字是什么,我们先来看看它的英文含义:插座。 socket起源于Unix,而Unix/Li........................

创作不易,请多支持,将为本站提供更多「有价值的文章」。 1万+

华为OD机试双机位C卷:完美走位 (C++/C/Py/Java/Js/GO)

华为OD机试双机位C卷 完美走位, 提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机考 完美走位, 华为OD机试 完美走位。

qq_45776114的博客 1724

在 SAP 中启用应收/应付“代扣税(Withholding Tax)”功能,本质上是激活并配置“扩展代扣税(Extended Withholding Tax)”模型

摘要:SAP中启用应收/应付代扣税功能需完成3个层级12个核心步骤:1)全局激活公司代码代扣税功能;2)配置代扣税规则、税率和科目,包括定义税种类型、代码、总账科目等;3)在供应商/客户主数据中关联代扣税设置。完成后系统可在发票或付款环节自动计算并过账代扣税,支持多税种并行计算和税率年度调整,最终生成税务报表。常见问题排查需检查公司代码激活状态和主数据配置。(149字)

金牌架构师 836

java中Socket通信的使用

Socket通信实现步骤 创建ServerSocket和Socket 打开连接到Socket的输入、输出流 按照协议对Socket进行读/写操作 关闭输入输出流、关闭Socket

u013938578的博客 559

金融领域图注意力网络的创新应用

随着金融市场的日益复杂和数据量的爆炸式增长,传统的数据分析方法在处理金融数据的复杂关系和结构时面临诸多挑战。图注意力网络(Graph Attention Network,GAT)作为一种新兴的深度学习技术,能够有效处理图结构数据,挖掘数据中的潜在关系。本文的目的在于深入探讨图注意力网络在金融领域的创新应用,涵盖风险评估、投资决策、欺诈检测等多个方面。通过理论分析、算法实现和实际案例展示,为金融从业者和研究者提供全面的技术参考,推动图注意力网络在金融领域的广泛应用。

AI云原生与云计算技术学院 719

Java使用Socket进行通信

文章目录1.使用ServerSocket创建TCP服务器端2.使用Socket进行通信3.demo展示 1.使用ServerSocket创建TCP服务器端   使用tcp通信的两个通信实体之间没有服务器端、客户端之分。java中能接收其他通信实体连接请求的类是ServerSocket,通过ServerSocket对象可以监听来自其他实体的socket连接,若没有连接,则ServerSocket对象...

wobushixiaobailian的博客 1098

如何修改网页中的文本内容改成自己希望的数值?

本篇文章主要讲解,通过浏览器命令和浏览器自带的F12开发者工具,进行修改网页内容的方法教程 日期:2021年12月5日 作者:任聪聪 一、通过F12开发者工具进行修改 进入方式汇总: 1.右击鼠标,显示菜单找到审查 2.通过快捷键F12进入,笔记本需要先关闭fnlk功能键。 开发者工具介绍 说明: 1.表示选择元素,点击后可以选择文本的元素所在地 2.表示显示方式,手机还是电脑 3.表示div元素,点击后可以展开,对div内的html和文本进行编辑。 双击文本,即可进行修改成自己想要的,但是刷新后.

任聪聪的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

delphi Socket通信的控件使用和API使用的区别

delphi Socket通信的控件使用和API使用的区别

1912

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

socket通信使用

这里写自定义目录标题socket代码1代码2代码实现如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 socket 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字

m0_56933752的博客 228

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 中使用socket使native和framework通信

一般的native和framework的通信是通过jni,但是这一般只是framework调用native,native如果有消息要怎样通知上层呢?android中GSP模块提供一种解决思路,但是实现有些复杂,这里介绍一种使用socket通信的方法可以使native和framework自由通信,具体实现如下: android中使用jni对linux中的socket进行了封装。使用起来十分的方便。

zzobin的专栏 3569

使用Bash进行Socket通信

一般Linux系统SHELL脚本准则明文密码。如下: #/bin/bash! DATE=`date +%Y%m%d` DATELAST=`date +%Y%m%d -d'-1 day'` lftp -u opt,opt sftp://32.12.20.44 << end ...... quit end 如果对于安全性要求较高的系统,这样的处理方式显然是不合规的。 那么,利用SHELL脚本S

lwh_1024的专栏 1878

使用jdk的socket通信

使用JDK提供的API进行网络通信,会用到Socket,ServerSocket两个类。写个简单的SERVER和CLIENT之间发消息的小程序,竟然发现了挺多的问题。 这是服务器端代码: package org.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre

ghostresur的专栏 2159
上一篇: .MainActivity为红色时的解决方案
下一篇: Socket通信——加入多线程
Ting_maple
博客等级 码龄9年 27粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值