java网络编程的通信原理_11 - 网络编程之设备间通信原理
一、网络编程
1表现形式:一台机子上的应用程序和另外一个设备的程序之间能够互相交换数据。
2 7层网络结构
硬件层:解决硬件连接问题
数据链路层:解决硬件之间能够向指定设备传输数据
IP:为设备提供一个虚拟的网络逻辑地址(门牌号)
MAC:设备的物理地址(网卡)
3 TCP / UDP
是两个不同的数据传输协议,就是解析字节的方式不同
目的:保证数据在设备和设备之间能够传输
协议:有结构的字节串
TCP一对一传输 可靠
UDP一对多传输 不可靠(如电视机)
4 socket(套接字)
会话握手
设备与设备的基本通信原理
步骤:A->B
1、B设置监听端口(大一点8000+因为小号已经被占用了)
2、A->B要两大要素:
①、找到B的IP地址
②、找到B的监听端口
3、B监听到端口进行保留
4、进行传输和接收数据。。。
注意:传输的数据是以字节为单位(NSData)
首先确认跟另一台机子试下能否ping成功
ping 192.168.1.xx
ctrl + c停止
准备:(client、server)
导入AsyncSocket类
在AsyncSocket.m标记为-fno-objc-arc
导入CFNetWork框架
server代码:
//
//MXViewController.m//day1102_TCPSocketServer//
//Created by tarena on 14-3-7.//Copyright (c) 2014年 tarena. All rights reserved.//#import"MXViewController.h"#import"AsyncSocket.h"@interface MXViewController ()@property (nonatomic, strong) AsyncSocket*serverSocket;
@property (nonatomic, strong) AsyncSocket*inSocket;-(IBAction)tap:(id)sender;
@end
@implementation MXViewController- (void)viewDidLoad
{
[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];//Dispose of any resources that can be recreated.
}-(IBAction)tap:(id)sender {
self.serverSocket=[[AsyncSocket alloc] init];
self.serverSocket.delegate =self;//监听端口
[self.serverSocket acceptOnPort:8000error:Nil];
}-(void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{
self.inSocket=newSocket;
NSLog(@"连接成功");//读取数据
[self.inSocket readDataWithTimeout:-1 tag:0]; //-1表示没有时间限制 一直接收
}-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{//NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];//NSLog(@"%@", text);//
//对象反归档
NSKeyedUnarchiver *unarc =[[NSKeyedUnarchiver alloc] initForReadingWithData:data];
id playerObj= [unarc decodeObjectForKey:@"player"];
}
@end
client代码:
//
//MXViewController.m//day1101_TCPSocketClient//
//Created by tarena on 14-3-7.//Copyright (c) 2014年 tarena. All rights reserved.//#import"MXViewController.h"#import"AsyncSocket.h"#import"MXPlayer.h"@interface MXViewController ()
@property (nonatomic, strong) AsyncSocket*clientSocket;-(IBAction)tap:(id)sender;-(IBAction)send:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField*textField;-(IBAction)sendMessage:(id)sender;
@end
@implementation MXViewController- (void)viewDidLoad
{
[super viewDidLoad];//Do any additional setup after loading the view, typically from a nib.
}- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];//Dispose of any resources that can be recreated.
}-(IBAction)tap:(id)sender {
self.clientSocket=[[AsyncSocket alloc] init];//连接服务器
[self.clientSocket connectToHost:@"192.168.1.202" onPort:8000 withTimeout:-1error:Nil];
}-(IBAction)send:(id)sender {
NSData*data = [@"hello"dataUsingEncoding:NSUTF8StringEncoding];
[self.clientSocket writeData:data withTimeout:-1 tag:0];
}-(IBAction)sendMessage:(id)sender {
MXPlayer*player =[[MXPlayer alloc] init];
player.name=self.textField.text;//对象归档 对象->data
NSMutableData *data =[NSMutableData data];
NSKeyedArchiver*arc =[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];//编码
[arc encodeObject:player forKey:@"player"];
[arc finishEncoding];
[self.clientSocket writeData:data withTimeout:-1 tag:0];
}
@end
传输数据
对象-> NSString ->Data跨平台
对象-> Data
用途:
和服务器进行数据交互
调用远程服务器应用程序的api,并传输对象
传输图像
client端有一个textField和一个获取按钮
server端什么都没有
在server端的程序上的documents目录下,存放图片到documents下
在client端输入图片名称,发送到server端
server端将同样名称的图片返回给client端
1.如果图片不再,
在客户端的另外一个label上显示没有这张图片
2.支持二次搜索
java网络编程的通信原理_11 - 网络编程之设备间通信原理相关推荐
- java 编程原理_Java网络编程 -- 网络编程基础原理
Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...
- Java基础学习总结(18)——网络编程
一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一 ...
- Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)
Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...
- Java Review(三十八、网络编程)
文章目录 网络基础 IP地址 端口 域名 网络模型 常用协议 Java 的基本网络支持 使用 InetAddress URL. URLConnection 和 URLPermission 基于TCP协 ...
- java网络编程技术有哪些_Java网络编程技术
<>首先我们需要知道自己的电脑在接入互联网后,互联网为自己的电脑所分配的唯一的IP地址: 这实际上是非常的容易的,只要在DOS窗口下进行命令行查询就行了: 运行--cmd--输入ipcon ...
- java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...
1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...
- Java基础学习——第十四章 网络编程
Java基础学习--第十四章 网络编程 一.网络编程概述 计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地互相传递信 ...
- java socket接口文档_Java进阶 - 网络编程、Socket、函数式接口、常用的函数式接口...
1.网络通信协议 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式.传输速率.传输步骤 ...
- C语言限制双开关不同为1,网络环境下不同客户之间通信的C语言编程方法(第1稿)...
网络环境下不同客户之间相互通信的C语言编程方法 大多数网络应用系统可分成客户和服务器两部分,他们之间的通信可能涉及两种方式:服务器和客户之间的通信,客户和客户之间的通信.本文主要阐明了网络环境下不同客 ...
最新文章
- [导入]Dreamweaver插入Flash参数
- 海南大学计算机科学与技术专业考研,2021年海南大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
- 串口服务器应用领域及应用方案详解
- C++虚继承中构造函数和析构函数顺序问题以及原理
- Web前端笔记-let n = 6 - data.length >>> 0 含义
- 吴恩达深度学习2.3练习_Improving Deep Neural Networks_Tensorflow
- UIScreen(屏幕)、UIWindow(画框)、UIView(画布)、didFinishLaunchingWithOptions的概念...
- 危机中转型,如何获得领导的支持?
- extern关键字的作用_一文搞懂static关键字与链接性
- JavaScript要点 (一) 变量-作用域
- linux的mysql不允许连接_linux下允许mysql远程连接
- Gaussview保存文件时,对话框一直弹不出来的原因
- 很搞笑的一个病毒--还能提问 “死亡问答”(Sola)宅男病毒
- pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看_ Pano2VR导出手机查看教程...
- 完美.PCK文件不完全详解
- 记忆测试系统c语言,单词记忆测试器程序设计.doc
- Android前景与未来趋势
- form 表单提交后,使页面不跳转
- 多CPU和多核CPU对应多进程和多线程调度
- linux tty字体,ArchLinux TTY 中文字体渲染