socket 流客户端实现

java使用socket网络编程实现qq互聊,一个服务器和多个客户端 本代码实现的功能是:利用socket网络编程,实现一个服务器和多台客户端的互聊! 阅读详情

 

#pragma mark Includes
#include <CoreFoundation/CoreFoundation.h>
#include <CoreServices/CoreServices.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#pragma mark -
#pragma mark Global Definitions

CFReadStreamRef   gReadStream = NULL;
CFWriteStreamRef  gWriteStream = NULL;

#pragma mark -
#pragma mark Static Function Declarations


///--2009-9-27-zorro
static Boolean Connect(const char* host, UInt16 port, UInt32 timeOut);
static void Disconnect();
static Boolean IsConnect();
static long SendData(const char * buffer,long length);
static long ReceiveData(char * buffer,long length);

#pragma mark -
#pragma mark Static Function Definitions

/* static */ Boolean
WaitForConnection(CFWriteStreamRef wStream, UInt32 timeOut) {
    // Since in this test app we have nothing better to do, we just poll to check whether
    // the connection has succeeded.  In a GUI app, the better approach would be to return
    // to the RunLoop to service events, and watch for the kCFStreamEventCanAcceptBytes event.
    int i;
    for (i = 0; i < timeOut; i++) {
        if (CFWriteStreamCanAcceptBytes(wStream))
            return TRUE;
        if (i == 1)
            fprintf(stdout, "Waiting for connection.../n");
        sleep(1);
    }
    return FALSE;
}

/* static */ Boolean
Connect(const char* host, UInt16 port,UInt32 timeOut) {
 
    // Check for a dotted-quad address, if so skip any host lookups
    in_addr_t addr = inet_addr(host);
    if (addr != INADDR_NONE) {
  // Create the streams from numberical host
  
        struct sockaddr_in sin;
        memset(&sin, 0, sizeof(sin));
  
        sin.sin_len= sizeof(sin);
        sin.sin_family = AF_INET;
        sin.sin_addr.s_addr = addr;
        sin.sin_port = htons(port);
  
  CFDataRef addressData = CFDataCreate(NULL, (UInt8 *)&sin, sizeof(sin));
        CFSocketSignature sig = { PF_INET, SOCK_STREAM, IPPROTO_TCP, addressData };
  // Create the streams.
  CFStreamCreatePairWithPeerSocketSignature(kCFAllocatorDefault, &sig, &gReadStream, &gWriteStream);
        CFRelease(addressData);
    
  // Inform the streams to kill the socket when it is done with it.
  // This effects the write stream too since the pair shares the
  // one socket.
  CFReadStreamSetProperty(gReadStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
  
  ///--2009-9-27-zorro
  // Try to open the streams.
  if (!CFReadStreamOpen(gReadStream))
  {
   return NO;
  }
  if(!CFWriteStreamOpen(gWriteStream))
  {
   CFReadStreamClose(gReadStream);
   CFRelease(gReadStream);
   gReadStream =  NULL;
   return NO;
  }
  
  if(WaitForConnection(gWriteStream,timeOut))
  {
   return YES;
  }
  else
  {
   CFReadStreamClose(gReadStream);
   CFWriteStreamClose(gWriteStream);
   CFRelease(gWriteStream);
   CFRelease(gReadStream);
   gWriteStream = NULL;
   gReadStream =  NULL;
  }
    }
 return FALSE;
}

void Disconnect()
{
 if (gReadStream)
 {
  CFReadStreamClose(gReadStream);
  CFRelease(gReadStream);
  gReadStream=NULL;
 }
    if (gWriteStream)
 {
  CFWriteStreamClose(gWriteStream);
  CFRelease(gWriteStream);
  gWriteStream=NULL;
 }
}

Boolean IsConnect()
{
 if(gWriteStream==NULL || gReadStream==NULL)
  return FALSE;
 CFStreamStatus rStatus = CFReadStreamGetStatus(gReadStream);
 CFStreamStatus wStatus = CFWriteStreamGetStatus(gWriteStream);
 
 if (rStatus == kCFStreamStatusError || wStatus == kCFStreamStatusError ||
  rStatus == kCFStreamStatusClosed || wStatus == kCFStreamStatusClosed ||
  rStatus == kCFStreamStatusAtEnd || wStatus == kCFStreamStatusAtEnd ||
  rStatus == kCFStreamStatusNotOpen || wStatus == kCFStreamStatusNotOpen)
 {
  return FALSE;
 }
 return TRUE;
}

long SendData(const char * buffer,long length)
{
 if(gWriteStream==NULL || buffer==NULL || length==0)
  return 0;
 
 // Try to send
 CFIndex bytesSent = CFWriteStreamWrite(gWriteStream, (const UInt8 *)buffer, length);
 
 return bytesSent;
}

long ReceiveData(char * buffer,long length)
{
 if(gReadStream==NULL || buffer==NULL || length==0)
  return 0;

 // Try to receive
 CFIndex bytesRead = CFReadStreamRead(gReadStream, (UInt8 *)buffer,length);  
 
 if (bytesRead > 0)
 {
  // Terminate the received string
  buffer[bytesRead] = '/0';
  
  // Print it out for the user
  //fprintf(stdout, "Received: %s/n", buffer);
 }
 return bytesRead;
}
#pragma mark -

 

中移物联ML307C模组OPENCPU笔记2 本文介绍了如何编译和运行一个DEMO程序,以官方SDK为例。 阅读详情

相关推荐

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5429

socket实现客户端和客户端之间通信和聊天

1.实体类 package edu.tcu.cn; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class User { priv

先紳博客 2万+

OpenGL纹理贴图

OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用 1. 基本概念 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。 学习之前先展示一张实现的纹理图以更好理解纹理! 还是这张图为了将纹

牵LV小猪精的博客 8930

从Samples中入门IOS开发(四)------ 基于socket的网络编程

SimpleNetworkStreams展示了如何基于Socket网络编程,实现了一个很典型的局域网内网络数据传输的场景,一个是client向server端发送本地的图片文件,另一个是client向server端下载图片到本地文件。抽取出来的一般流程: server开启socket监听 此处IOS的一般做法是三步走: 第一步:创建系统级的socket,并绑定端口 port = 0; ...

dawuafang 139

用 Python 和 uiautomation 实现微信批量发送

思路是这样,将要发送的人员名单(包括称呼)以及发送内容都维护到Excel里,程序运行时读取Excel里内容,自动搜索人员姓名(微信昵称或备注名),填入要发送的内容,拼接上称呼(如果需要的话)自动点击发送,这样轮巡直至名单人员全部发送完成。、

jankingdom的专栏 1471

AMEsim不连续处理机制:仿真精度与效率的平衡艺术

本文深入解析AMEsim不连续处理机制在系统仿真中的应用,探讨如何平衡仿真精度与效率。通过液压系统仿真案例,详细介绍了事件检测算法、变步长求解器自适应策略及典型场景优化方法,帮助工程师有效应对仿真中的不连续性问题,提升仿真效率和准确性。

v4w5x6的博客 442

Socket初识-多线程实现多用户登录

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33894640的博客 562

黑群晖二合一已损毁_手动修复黑群晖已损毁磁盘空间

lz的用法是这样的,一个中古级mac mini 2011上装有vmware esxi 7.6, 然后上面挂载了lz的华芸Asustor Nas的iscsi空间,lz用的是basic volume,然后esxi上面有虚拟的黑群晖6.2.2-24922,黑群晖的docker里跑着不可描述软件,但是发现下载速度过快时,比如有好几个文件同时下载,总速度超过60MB/s以后storage manager里很...

weixin_39669629的博客 1万+

socket客户端和服务端的实现

客户端: 调用socket的构造方法,传入服务端的IP地址和端口号就可建立连接; In是用来读要发送的文件,     Out用来发送数据,可通过socket对象的getOutputStream方法来获取out流; 服务端: 通过ServerSocket构造方法(传入端口号)创建一个对象,通过这个对象的accept方法获取到服务端这边的Socket对象,从而建立起连接; ...

emmmsuperdan的博客 627

ubuntu为Docker配置代理

我们平常在ubuntu终端中使用curl或git命令时,往往会很慢。所以,首先需要给ubuntu终端环境添加代理。查看自身那个软件的端口号,我这里是7890。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 1643

uniapp [全端兼容] - 实现人脸识别对比+人脸相似度,从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,人脸活体检测及对比(免费纯前端方案+调用第三方API接口方案)

uniApp人脸对比 人脸对比识别 人脸对比相似度,uniapp实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,uniapp实现人脸识别对比,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。uniapp H5网页如何实现人脸相似度比对,uniapp纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,UNI-APP人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,uniapp微信小程序人脸相似度对比分析,uniapp

🏆 前端领域优质创作者 5020

使用Socket实现多客户端用户登录

首先是线程类:然后是服务器:在这里我把线程类和服务端是写在一起的,因为服务器只是用了一个方法而已。最后是客户端示例:这里的客户端也是用了一个方法,后面的封装学生信息只是即兴添加的,但是通常情况下,还是建议把获取学生信息和客户端分开写,也就是拆分成两个不同的方法,这样可以增加代码的易读性。也方便后期维护。这是听一个老前辈说的。最后是测试类,因为服务器端和客户端不能在一个测试类里(已亲测,我猜测是因为...

MAX_EOTS的博客 4686

用 ADT 的 RAP Generator 把 RAP 栈一键搭起来:从表到可预览的 OData V4 应用

摘要 SAP RAP Generator 工具能显著提升开发效率,通过一键生成从数据库表到完整 OData UI Service 的全套对象(包括 CDS、Behavior、Service Definition 等)。该工具特别适用于原型验证和标准化应用开发,可节省 60% 以上的基础编码时间。使用时需注意: 表设计需包含关键管理字段(如 last_changed 时间戳) 向导配置决定分层架构和命名规范 生成结果包含可立即预览的 Fiori Elements 界面 后续可专注于业务逻辑增强(校验、权限等)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1281

socket服务实例:TCP(面向流的socket)实现ECHO服务器与客户端

所谓的ECHO服务就是在屏幕打印相关的参数,相关的应用过程如下: 服务器逻辑 1.服务器启动之后创建服务器socket,进行相应的设置后始终调用accept(2)等待客户端的连入,客户端 正常连入之后创建一个子进程作为业务进程,对客户端进行服务,父进程 始终作为监听进程等待下一个客户端的连入; 2.其中为了防止僵尸进程的出现,服务器需要有处理子进程退出的功能,简便起见,程序中直接安装一个信号处理程序,用于处理SIGCHLD信号,这个过程完全异步,没有体现在流程图内。 如图为程序流程图 但是该服务器的.

LCY133的博客 3535

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java socket与io流_【Java__Socket 】服务端和客户端通信案例(IO流)

0、前言Java IO 流分为输入流InputStream和输出流OutputStream输入流输出流InputStreamOutputStream读进来写出去读到程序内存写出到流里面1、客户端public static void main(String[] args) throws IOException {new Thread(() -> {Socket socket = null;tr...

weixin_35063099的博客 295

STM32F407中文手册

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

Java网络编程基础:Socket和ServerSocket + IO流实现基本的客户端/服务器通信架构(C/S)

一、Socket和Client 1、Socket是客户端创建的通信端点,比较官方的翻译是:套接字,但是这个翻译对于初学者来说,比较抽象,不易理解。为了方便理解,我这里举个简单的例子。 我们可以把客户端比作电话,服务器端比作某移动公司的客服电话,当你拨打该客服电话时,需要输入电话号码,此时这个号码我们就可以理解为服务器的地址(IP),但是由于客服业务众多,就算电话接通后,也并不知道你要办理或咨询什么业务,此时会提示你按某数字键来确定你想要办理的业务,此时的数字键我们就可以理解为服务器的端口号(PORT),

笑笑是一个码农 967

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

socket编程实践--壹

socket编程的基础知识。bind()函数,accept()函数,connect()函数注意点!

suliangkuanjiayou的博客 300

android 实现socket服务端,Android socket实现原理详解 服务端和客户端如何搭建

本文实例为大家分享了Android socket的实现原理,供大家参考,具体内容如下Socket套接字是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。socket实现的原理机制:1、通信的两端都有Socket2、网络通信其实就是Socket间的通信3、数据在两个Socket间通过IO传输建立Socket(客户端)和ServerSocket(服务器端)建立连接后,通...

weixin_33642922的博客 2414

java实现socket长连接_java如何实现Socket的长连接和短连接

讨论Socket必讨论长连接和短连接一、长连接和短连接的概念1、长连接与短连接的概念:前者是整个通讯过程,客户端和服务端只用一个Socket对象,长期保持Socket的连接;后者是每次请求,都新建一个Socket,处理完一个请求就直接关闭掉Socket。所以,其实区分长短连接就是:整个客户和服务端的通讯过程是利用一个Socket还是多个Socket进行的。可能你会想:这还不简单,长连接不就是不关S...

weixin_42515631的博客 4368

Java聊天室 IO流 Socket流 GUI界面 客户端功能及页面介绍

Java聊天室 IO流 Socket流 GUI界面 客户端功能及页面介绍 文章目录Java聊天室 IO流 Socket流 GUI界面 客户端功能及页面介绍Image存放的是图片素材JiLu存放的是聊天记录SanWa是代码存放位置Net里存放的是客户端的消息类型枚举 根据消息类型进行分类型的读取User里存放的是将需要传递的内容整体打包为一个对象 然后分开读取FileUtils文件发送的工具类UtilsPathUtils是设置背景图片的图片路径Utils工具类ScreenUtils是获取电脑屏幕大小的工具类B

cx9977的博客 838

Java聊天室 IO流 Socket流 GUI界面 客户端ClientReadMsgThread消息读取进程详解

Java聊天室 IO流 Socket流 GUI界面 客户端ClientReadMsgThread消息读取进程详解 文章目录Java聊天室 IO流 Socket流 GUI界面 客户端ClientReadMsgThread消息读取进程详解分类型读取接收服务端回复的消息:发送者:内容:消息类型:时间PRIVATE_MSG, 私聊枚举类型ONLINE_LIST1, 隐身上线的查询在线列表枚举类型SHANGXIAN, 上下线枚举类型WENJIAN, 发送文件枚举类型FANKUI,接受或拒绝消息反馈枚举类型PUBLIC

cx9977的博客 530

socket流的关闭

在使用socket进行全双工通信时,原本以为输入流和输出流是分开关闭的,然而不管关闭哪个都会直接关闭socket;可以使用socket.shutdownInput()和socket.shutdownOutput() 客户端 使用InputStream 进入bebug模式,在执行到 inputStream.close()后进入SocketInputStream的close()方法,而这个方法是关闭socket流 执行reader.close()后,最后也是执行SocketInputStream的close(

Myueye的博客 2845

java socket编程实现客户端服务端TCP通信

先前的一篇博文(C语言socket编程实现TCP通信),在unix系统下,利用C语言socket编程简单实现了客户端服务端TCP通信。实际上,利用java.net包中的类可以更容易的进行socket通信。 但不管是使用java还是C语言进行socket编程,TCP通信本质上是一样的。都是服务端端绑定一个端口并对此端口进行监听,客户端根据IP和端口访问服务端,两者通过三次握手建立连接,然后就可以通...

poetteaes的博客 1141

Socket编程实现客户端与服务器一对一聊天

Socket(套接字) 使用Socket编程实现数据的交互需要经历以下几个步骤: 1、创建Socket: Socket socket = new Socket("host",port); 2、打开IO流 PrintWriter out = new PrintWriter(socket.getOutputStream(),true);//输出流 Buffe...

weixin_30906425的博客 795

android socket 服务端,Android socket实现原理详解 服务端和客户端如何搭建

Android socket实现原理详解 服务端和客户端如何搭建发布时间:2020-09-21 01:38:03来源:脚本之家阅读:134作者:Android_Sunshine_Sun本文实例为大家分享了Android socket的实现原理,供大家参考,具体内容如下Socket套接字是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。socket实现的原理机制:1、...

weixin_39871649的博客 243

java网络编程(2)——通过Socket类建立客服端和服务器的连接,实现TCP客户端向服务端通过IO流发送文字

1.服务端 1.1服务端代码 package com.cn.lixv; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.nio.Buffer; //服务端 public class study1 { public static void main(String[] args){ Serv

木子 旭的博客 337
上一篇: (转)堆栈与函数调用
下一篇: iphone中使用SQLITE3数据库
nitghost
博客等级 码龄19年 32粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值