资讯专栏INFORMATION COLUMN

通过Socket局域网内控制pc关机

avwu / 2609人阅读

摘要:最近由于项目需要了学习了些中简单网络编程,这个小的关机,端无疑用写了,用写其中请教了基友列表项目端尽量简化了代码,只写了核心功能的代码这就了,,,其实这就一个其中的就是输入命令,而就是将命令发送给端。端,实现客户端主机端

***最近由于项目需要了学习了些ios中简单网络编程(socket),这个小的关机demo,ios端无疑用oc写了,pc用Java写(其中请教了基友)

列表项目

iOS端
尽量简化了代码,只写了核心功能的代码

这就ui了,,,其实这就一个textfield+button
其中的textfield就是输入命令,而button就是将命令发送给pc端。
所以给button帮定了发送的方法:
- (IBAction)send:(id)sender {
if(isline)
{
NSString niam = [NSString stringWithFormat:@"%@",self.texteidt.text];
self.texteidt.text = nil;
const char
data = [niam UTF8String];
send(CFSocketGetNative(_socket),data,strlen(data)+1,1);
}
else
NSLog(@"error_line");
}

而_socket 一个CFSocketRef,通过查资料,发现在iOS中实现Socket(客户端)有三种技术:
1.NSStream 它是oc语言实现的,是oc的Foundation框架的API;
2.CFstream c语言实现的,oc的Core Foundation的API;
3.BSD Socket 也是c实现而且是一群NB大学生搞的,别名(伯克利),它在unix用的多。
本dome用到是方法2,
完整的实现化一个可用Socket:
_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketConnectCallBack,nil , NULL); //@_1
if(_socket!=nil)
{ struct sockaddr_in add4;
memset(&add4, 0, sizeof(add4));
add4.sin_len = sizeof(add4);
add4.sin_family = AF_INET; //@_2
add4.sin_addr.s_addr = inet_addr("192.168.1.131");
add4.sin_port = htons(30000);
CFDataRef addres = CFDataCreate(kCFAllocatorDefault, (UInt8*)&add4, sizeof(add4)); //@_3
。。。。}

代码@_1处 CFSocketCreate(
CFAllocatorRef allocator,
SInt32 protocolFamily,
SInt32 socketType,
SInt32 protocol,
CFOptionFlags callBackTypes,
CFSocketCallBack callout,
const CFSocketContext *context);
创建Socket对象,
第一个参数(kCFAllocatorDefault)指创建对象时内存的分配方式,其实也可写NULL其实大多我都写的NULL;
第二参数(PF_INET)其实是你创建的Socket的协议族类型,PF_INET传的为0||负数。
第三个参数(sock_stream)是创建Socket的类型,sock_steam的是tcp的(也是我们用的),sock_dgram的是udp,其实看到udp与tcp没什么怕的,就是两个概念对于我们来说。
第四个参数(IPPROTO_TCP)协议类型,其实与第三个参数有关,tcp->IPPROTO_TCP;udp->IPPROTO_UDP.
第五个参数(kCFSocketConnectCallBack)回调类型,本dome中用的类型是接受客服端回调,看到这你可能会想这不是客户端吗?不要慌,接着看。
第六个参数(nil),回调函数名,其实就是一个地址,简单来说就是第四个参数说我要这种,第五个就是你帮它实现这种的函数的函数名,所以我只是说了,但没有实现,更不会执行。
最后一个,它是个结构体,为了配置你创建的socket;(其实这个我也不是很了解,不过现在还没有用到)

在代码@_2处,AF_INET 设置IPV4地址;
在代码@_3处,是给我们创建的Socket绑定地址;

到此ios端核心代码就这么多。

pc端,java实现
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socke

public class AA extends Frame{
Socket s = null;
ServerSocket ss=null;
DataOutputStream dos = null;
DataInputStream dis = null;

TextField tfTxt = new TextField();

TextArea taContent = new TextArea();

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

new AA().launchFrame();

}

public void launchFrame() {
// TODO Auto-generated method stub
setLocation(400, 300);
this.setSize(300, 300);

add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent arg0) {
disconnect();
System.exit(0);
}
});
tfTxt.addActionListener(new TFListener());
setVisible(true);
connect();
}

private void connect() {
// TODO Auto-generated method stub
try {
ss = new ServerSocket(30000);

while(true)
{
s=ss.accept();

dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
//System.out.println("connected! OK!!");
processConnection();
}
} catch (IOException e) {
e.printStackTrace();

}
}

private void processConnection() throws IOException{
// TODO Auto-generated method stub
String message="";
byte[] buff = new byte[2048];
int hasRead =-1;
byte[] butt = new byte[16];
String mm = "shutdown -s";
do{
hasRead = dis.read(buff);
dos.write(message.getBytes("utf-8"));
String str= new String(buff , 0 , hasRead, "utf-8");
this.taContent.append(t+"客户端: "+str+" ");
JSONObject json=JSONObject.fromObject(str);
message = new String(buff , 0 , hasRead, "utf-8");
System.out.println(message);
if(mm.equals(message))
{
System.out.println("pc_down");
Runtime.getRuntime().exec("shutdown -s");
}
taContent.setCaretPosition(taContent.getText().length());
}while(!message.equals("88"));
}

private void disconnect() {
// TODO Auto-generated method stub
try {
dos.close();
dis.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private class TFListener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
sendMessage(e.getActionCommand());

}
private void sendMessage(String message) {
// TODO Auto-generated method stub
try {
dos.write(message.getBytes("utf-8"));
dos.flush();
taContent.append(t+"主机端: "+message+" ");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15599.html

相关文章

  • Python 远程开机

    摘要:大多数是用程序扫描邮箱,如果收到关机相关关键词的邮件,则程序自动执行关机命令。本机程序中需要有一条执行关机的命令即可 用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机。 GitHub 仓库地址:https://github.com/injetlee/Python/tree/master/Python%20%E...

    Miracle_lihb 评论0 收藏0
  • 【千锋】网络安全学习笔记

    摘要:寄居架构原生架构生产环境直接安装在硬件上真实与虚拟切换详解一简单局域网的构成交换机组建局域网路由器上网连接内外网局域网一般称为内网局域网的构成交换机,网线,其他终端家用三层交换机二地址唯一标识,是一段网络编码二进制八位一 P3 1.寄居架构 2.原生架构(生产环境)直接安装在硬件上 真实与虚...

    shadowbook 评论0 收藏0
  • ##计算机网络(tcpip)面试笔试考研应用实践

    摘要:第一章计算机网络基础网络体系结构的关键要素是协议和拓扑结构。分层层物理层数据链路层网络层也称层传输层会话层表示层应用层。协议簇层网络接口层网际层运输层应用层。源主机收到响应包后。 https://note.youdao.com/share... 含图解 、看到拥塞控制和差错控制。 资料 计算机网络(谢希仁)第五版课件.ppt ,章节一层没有目录,可作为以上资料的辅助资料。 再看不懂...

    FleyX 评论0 收藏0
  • LinuxDay01

    摘要:的应用领域个人桌面领域在国内市场,桌面操作系统的发展趋势非常迅猛。目前已经在政府企业等领域得到了广泛应用。另外也相继推出了基于的桌面系统,特别是,已经积累了大量社区用户。并且保持着快速的增长率。尤其在政府金融农业交通电信等国家关键领域。 ...

    kun_jian 评论0 收藏0
  • 使用WebRTC搭建前端视频聊天室——信令篇

    摘要:使用能使得状态被保存在服务器上会话描述协议将客户端之间传递的信令分为两种信令和信令。他们主要内容的格式都遵循会话描述协议,简称。 博客原文地址 建议看这篇之前先看一下使用WebRTC搭建前端视频聊天室——入门篇 如果需要搭建实例的话可以参照SkyRTC-demo:github地址 其中使用了两个库:SkyRTC(github地址)和SkyRTC-client(github地址) ...

    sixgo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<