如何通过Socket通信控制LED

作者&投稿:滑庞 (若有异议请与网页底部的电邮联系)
socket通信~

if ( pse = getservbyname(service, transport) )

原理是:,将socket建立连接的方式,用一个工厂方法来包装
这个方法就是getservbyname()

他的本质就是,传一个远程主机地址,和服务端口号。
然后生成 一个socket对象,以供使用!!

/**服务器端*/


import java.io.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class Server extends JFrame implements Runnable ...{
private ServerSocket server;
private Socket connection;
private OutputStream output;
private InputStream input;
private Thread outThread;
private JTextArea display;
private JTextField text1;
private JButton startButton;

public static void main(String args[]) ...{
Server s = new Server();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public Server() ...{
super("Server");
startButton = new JButton("Start the server");
text1 = new JTextField(20);
display = new JTextArea(7, 30);
display.setEditable(false);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(startButton,BorderLayout.NORTH);
container.add(new JScrollPane(display),BorderLayout.CENTER);
container.add(text1,BorderLayout.SOUTH);

/**//*
* 给开始按钮添加监听器。
*/
startButton.addActionListener(new ActionListener()...{
public void actionPerformed(ActionEvent e) ...{
display.setText("启动服务器... ");
startButton.setEnabled(false);
try ...{
//端口设为5000,最大连接请求为100个
server = new ServerSocket(5000, 100);
connection = server.accept();
output = connection.getOutputStream();
input = connection.getInputStream();
output.write("连接成功! ".getBytes());
outThread = new Thread(Server.this);
outThread.start();
} catch (IOException ee) ...{
}
}
});

/**//*
/*给文本域添加键盘监听器,按回车发送信息。
*/

text1.addKeyListener(new KeyAdapter()...{
public void keyPressed(KeyEvent ke) ...{
if(ke.getKeyCode() == KeyEvent.VK_ENTER)...{
byte writeBytes[] = new byte[50];
String s = "Server: " + text1.getText() + "";
text1.setText("");
writeBytes = s.getBytes();
display.append(s+" ");
try ...{
output.write(writeBytes);
} catch (IOException ee) ...{
}
if (s.trim().equals("Server: exit")) ...{
outThread.stop();
quit();
}
}
}
});
setSize(300, 400);
setResizable(false);
setVisible(true);
}

public void run() ...{
while (true) ...{
byte readBytes[] = new byte[50];
try ...{
input.read(readBytes);//读去对方发送的消息
} catch (IOException e) ...{
}
String s = new String(readBytes);
display.append(s+" ");
if (s.trim().equals("Client: exit"))
break;
}
quit();
}

public void quit() ...{
try ...{
output.close();
input.close();
connection.close();
} catch (IOException e) ...{
}
startButton.setEnabled(true);
}
}
/**//*
*客户端
*/


import java.io.*;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;

public class Client extends JFrame implements Runnable ...{
private Socket client;
private OutputStream output;
private InputStream input;
private Thread outThread;
private JTextArea display;
private JTextField text1;
private JButton startButton;
private JMenu loginMenu = new JMenu("登录");
private JMenuItem register = new JMenuItem("注册");
private JMenuItem login = new JMenuItem("登录");
private JMenuBar bar = new JMenuBar();
private Register registerDlg ;
private Login loginDlg;
private RandomAccessFile file;

public static void main(String args[]) ...{
Client c = new Client();
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public Client() ...{
super("Client");
startButton = new JButton("Connect to server");
text1 = new JTextField(20);
display = new JTextArea(7, 30);
display.setEditable(false);
loginMenu.add(register);
loginMenu.add(login);
bar.add(loginMenu);
setJMenuBar(bar);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(startButton,BorderLayout.NORTH);
container.add(new JScrollPane(display),BorderLayout.CENTER);
container.add(text1,BorderLayout.SOUTH);

try ...{
file = new RandomAccessFile(new File("E://login.txt"),"rw");
} catch (IOException e1) ...{
e1.printStackTrace();
}
registerDlg = new Register(this,file);
loginDlg = new Login(this,file);
startButton.addActionListener(new ActionListener()...{
public void actionPerformed(ActionEvent e) ...{
display.setText("连接服务器...");
startButton.setEnabled(false);
try ...{
client = new Socket("127.0.0.1", 5000);
output = client.getOutputStream();
input = client.getInputStream();
outThread = new Thread(Client.this);
outThread.start();
} catch (IOException ee) ...{
}
}
});
text1.addKeyListener(new KeyAdapter()...{
public void keyPressed(KeyEvent ke) ...{
if(ke.getKeyCode() == KeyEvent.VK_ENTER)...{
byte writeBytes[] = new byte[50];
String s = loginDlg.getLoginName()+": " + text1.getText() + "";
text1.setText("");
writeBytes = s.getBytes();
display.append(s+" ");
try ...{
output.write(writeBytes);
} catch (IOException ee) ...{
}
if (s.trim().equals(loginDlg.getLoginName()+": exit")) ...{
outThread.stop();
quit();
}
}
}
});
register.addActionListener(new ActionListener()...{
public void actionPerformed(ActionEvent e) ...{
registerDlg.setVisible(true);
}
});
login.addActionListener(new ActionListener()...{
public void actionPerformed(ActionEvent e) ...{
loginDlg.setVisible(true);
}
});
setSize(300, 400);
setResizable(false);
setVisible(true);
}

public void run() ...{
while (true) ...{
byte readBytes[] = new byte[1024];
try ...{
input.read(readBytes);
} catch (IOException e) ...{
}
String s = new String(readBytes);
display.append(s+" ");
if (s.trim().equals("Server: exit"))
break;
}
quit();
}

public void quit() ...{
try ...{
output.close();
input.close();
client.close();
} catch (IOException e) ...{
}
startButton.setEnabled(true);
}
}



import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;


public class Login extends JDialog...{
private JTextField textField;
private JButton loginButton;
private RandomAccessFile file;//保存注册信息的文件
private String loginName = "guest";//保存登录者的名字,为登陆为guest;

public Login(JFrame f,RandomAccessFile file)...{
super(f,"登陆",false);
this.file = file;
JPanel panel = new JPanel();
panel.add(new JLabel("昵称:"));
textField = new JTextField(10);
panel.add(textField);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(panel,BorderLayout.NORTH);
loginButton = new JButton("登陆");
container.add(loginButton,BorderLayout.SOUTH);
setVisible(false);
setBounds(100,200,200,200);
loginButton.addActionListener(new LoginListener());
}

public String getLoginName()...{
return loginName;
}
/**//*
* 登录监听器,当单击登陆按钮时,触发该事件
* 从文件中读取并查找是否注册过,如果没有找
* 到则弹出未注册警告。否则弹出欢迎对话框表
* 示欢迎
*/
private class LoginListener implements ActionListener...{
public void actionPerformed(ActionEvent e) ...{
boolean flag = false;
try ...{
String name = textField.getText().trim();
textField.setText("");
file.seek(0);
while(file.getFilePointer() < file.length())...{
String nik = file.readUTF();
if(nik.equals(name))...{
flag = true;
loginName = name;
break;
}
}
if(!flag)...{
String warning="没有找到你的账号请先注册!";
JOptionPane.showMessageDialog(Login.this,warning,"警告",JOptionPane.WARNING_MESSAGE);
}else...{
String welcome="欢迎来聊天!";
JOptionPane.showMessageDialog(Login.this,welcome,"欢迎",JOptionPane.WARNING_MESSAGE);
}
Login.this.setVisible(false);
} catch (IOException e1) ...{
e1.printStackTrace();
}
}
}
}



import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;


public class Register extends JDialog...{
private String nickName;
private JTextField textField;
private JButton registerButton;
private RandomAccessFile file;////保存注册信息的文件

public Register(JFrame f,RandomAccessFile file)...{
super(f,"注册",false);
this.file = file;
JPanel panel = new JPanel();
panel.add(new JLabel("昵称:"));
textField = new JTextField(10);
panel.add(textField);
Container container = getContentPane();
container.setLayout(new BorderLayout());
container.add(panel,BorderLayout.NORTH);
registerButton = new JButton("注册");
container.add(registerButton,BorderLayout.SOUTH);
setVisible(false);
setBounds(100,200,200,200);
registerButton.addActionListener(new RegisterListener());
}
/**//*
* 注册监听器,当单击登注册按钮时,触发该事件
* 并向文件中写入注册信息。
*/
private class RegisterListener implements ActionListener...{
public void actionPerformed(ActionEvent e) ...{
try ...{
file.seek(file.length());
String str = textField.getText();
textField.setText("");
file.writeUTF(str);
Register.this.setVisible(false);
} catch (IOException e1) ...{
e1.printStackTrace();
}
}
}
}

对于树莓派来说,可以通过ssh和电脑进行互联,所以一般的应用来说,不需要socket通信,只要打开ssh在树莓派上运行写好的Python或者C程序即可。但是,有的project需要多个sensor,如果仅仅通过打开多个ssh来运行不同程序,这样sensor搜集的数据就不直观,因此就需要在PC上建立一个Server来和树莓派通信,从而可以把所有sensor以及其他devices需要的信号都集中显示在一个PC端的程序上。如果会网页编程的话,在树莓派上建立一个WEB服务器应该也很好实现这个功能。如果不会网页编程,那只好使用socket通信了。最简单的开始,也就是通过socket控制LED的亮与熄。
下面是Server端的程序:# TCP-Serverimport socket
# 1. 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 将 socket 绑定到指定地址 (本机地址)address = ('192.168.1.102', 8889)
s.bind(address)
# 3. 接收连接请求# listen(backlog), The backlog argument specifies the maximum number of queued connections and should be at least 0;
# the maximum value is system-dependent (usually 5), the minimum value is forced to 0.
s.listen(5)
print 'Waiting for connection...'
# 4. 等待客户请求一个连接# 调用 accept 方法时,socket 会进入 "waiting" 状态。
# accept方法返回一个含有两个元素的元组 (connection, address)。
# 第一个元素 connection 是新的 socket 对象,服务器必须通过它与客户通信;
# 第二个元素 address 是客户的 Internet 地址。
new_s, addr = s.accept()
print 'Got connect from', addr
# 5. 处理:服务器和客户端通过 send 和 recv 方法通信
command = ' '
print ('Please enter 1 to turn on the led, 2 to turn off the led,3 to disconnect the communication:')
while True:
command = raw_input()
new_s.send(command)
data = new_s.recv(512)
print data if data == 'Communication is disconnected':
break
# 6. 传输结束,关闭连接
new_s.close()
s.close()
接下来是Client端程序:
# TCP-Clientimport RPi.GPIO as GPIO
import time
import socket

address = ('192.168.1.102', 8889)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(address)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, False)
GPIO.output(27, False)
while True:
command = s.recv(512)
if command == '1':
GPIO.output(27, True)
GPIO.output(17, False)
s.send('Command 1 received by client')
print "Command is ", command
elif command == '2':
GPIO.output(27, False)
GPIO.output(17, True)
s.send('Command 2 received by client')
print "Command is ", command
elif command == '3':
s.send('Communication is disconnected')
print "Command is ", command
break
else:
s.send('Please enter 1, 2 or 3')
print "Command is ", commands.close()
我们只需要在PC上运行Server的程序,在Raspberry Pi上运行Client的程序便可以控制LED的亮与熄了,很简单。


Socket p478和Socket 478有何区别
Socket 478插槽是Pentium 4系列处理器所采用的接口类型,针脚数为478针。Socket 478的 Socket 478插槽 Pentium 4处理器面积很小,其针脚排列极为紧密。采用Socket 478插槽的主板产品数量已不多,已不是曾经应用最为广泛的插槽类型了,并且将逐渐被淘汰,市面上已很少见。 Socket 478:Willamette内核奔腾...

Java用何种技术架构编写服务端,能让VB客户端访问?
⒘奶焓业脑�砭褪欠�穸私��ocket监听,客户端建立socket客户端与服务端socket交互,服务端通过广播或单通道的方式将处理后的数据下发 2、服务端需要建立socket服务,采用何种技术不重要,java\/c\/.net这些都可以 3、客户端需要实现socket客户端,采用何种技术也不...

Slot插槽与SOCKET插槽有何区别
socket就是针式插件, slot是卡式插件。后者已经是很久以前用的插槽方式了。

网络中常见针对操作系统攻击方法有哪些?各有何特点
他们的繁殖能力很强,一般通过Microsoft的 Outlook软件向众多邮箱发出带有病毒的邮件,而使邮件服务器无法承担如此庞大的数据处理量而瘫痪。对于个人上网用户而言,也有可能遭到大量数据包的攻击使其无法进行正常的网络操作。9.端口扫描所谓端口扫描,就是利用Socket编程和目标主机的某些端口建立TCP连接、进行传输协议的验证等,...

JAVA 学习方法或捷径--求教
总之,Socket部分是建立其它高级协议的基础。 2. URL类是一个网络资源定位器,通常和具体的网络协议如HTTP,FTP,Telnet……相关。通过该类可以连接网络上的资源,通过其openStream可以以io包中的流(InputStream)的形式读取网络资源;通过其OpenConnection方法,可以打开一个连接,在此连接上可以不仅可以完成读的操作,还可以...

C++socket的accept函数和connect函数,都会陷入无限的等待中??肿么解决...
你应该看看几种套接字编程的模型,使用异步操作就可以立即返回,但你同样需要等待套接字句柄,以知晓何时为信号状态.具体要怎么做三言两语根本说不清楚,自己可以看看<WINDOWS核心编程>,套接字的异步操作和文件的异步操作是大同小异的.

Slot 1接口跟SOCKET 370接口有何不一样
slot1得cpu有点像一张卡,通过一个长条形的接口连接的!370是平铺在主板上的!不过很多厂商提供了转接卡,可以将370德cpu插在转接卡上,然后插在slot1上!amd也曾经推出和slot1差不多的cpu,他叫slot a!

计算机主板主要包括哪些部件,各有何功能?
根据主板的不同结构和种类,主板上的部件的种类有所区别。但是,主要的部件都 是一样的。具体来说,主板的主要部件有:1.CPU插座。CPU插座根据CPU封装形式的不同主要分为4种,一种是Socket7插座,是 Pentium级别的CPU使用的,在主板上是一个接近正方形的白色扁平插座,边上带有一个 金属把手,将把手...

m.2固态硬盘接口与NGFF固态硬盘接口有何区别?
NGFF接口与mSATA接口的区别?1、NGFF是一种另一种连接器接口类型,有别于普通的SATASSD和mSATASSD。NGFFSSD按总线类型分,也分为SATA和PCIe两种,即市场上有NGFFSATASSD和NGFFPCIeSSD。2、两者所走的通道不同,M.2有两种接口定义:Socket2和Socket3。Socket2支持SATA、PCI-EX2通道的SSD,Socket3专为...

企业内部泄密的途径有哪些 ?怎么防止
其实防泄密要从源头去解决,而不是堵住所有的泄密途径。因为1000中泄密途径,你堵住了999种,只要有一种泄露也就功亏一篑了。你可以试一下现在很多企业都在用的加密软件。加密文件自身,完全不用担心文件是通过什么途径泄露,因为加密的文件别人是打不开的。现在市面上很多,比如,红线防泄密系统,就是...

槐荫区13116115393: 如何通过Socket通信控制LED -
徐终思泰: 对于树莓派来说,可以通过ssh和电脑进行互联,所以一般的应用来说,不需要socket通信,只要打开ssh在树莓派上运行写好的Python或者C程序即可.但是,有的project需要多个sensor,如果仅仅通过打开多个ssh来运行不同程序,这样sensor...

槐荫区13116115393: LED显示屏的问题.我在Linux下通过socket编程,通讯可以成功,led屏上显示了笑脸,但是显示的内容并没有 -
徐终思泰: 这个问题出在编程,与LED或LCD甚至CRT无关的!Linux到socket中找到解决问题的办法!

槐荫区13116115393: c#程序怎么通过IP地址向LED屏发送数据 -
徐终思泰: 这问题不是一句话能说清楚的,只能给你个大致的思路.首先要弄清楚LED屏幕控制器的指令协议,也就是LED控制器的指令格式.需要通过IP与LED交互操作的话,那一定是使用网口控制,这还需要明白怎么进行socket编程,LED做服务器还是电脑做服务器,这决定了谁主叫谁被叫.实现服务器客户端socket连接后,按照LED的指令协议,对其进行控制就行了.

槐荫区13116115393: C#控制LED屏程序 -
徐终思泰: 既然能传字符,也就知道控制LED屏幕的行列指令了;你先将表格,根据需要传到LED屏幕;通过LED行列的控制,完成字符串的动态修改

槐荫区13116115393: 用电脑串口控制LED电路 -
徐终思泰: 我给你个方案: 控制多种颜色的LED需要使用单片机来控制,而单片机和计算机进行通信,根据通信内容相应计算机的要求. 这些都没有问题,包括计算机上的软件编写,如果不会,可以问我.

槐荫区13116115393: c#串口如何编写LED灯的开启与关闭 -
徐终思泰: 工具箱->组件->SerialPort 这是个串口组件,通过它和连在串上的LED灯进能通信.用指令控制就行.这个涉及到了硬件,你要有和硬件通信的协议

槐荫区13116115393: 用C#实现发送文字数据在LED显示 -
徐终思泰: 土霸会靶标 士大夫

槐荫区13116115393: 单片机 电脑上创建一个窗口,点击相应的按钮,控制单片机上LED灯的亮灭 -
徐终思泰:你好!这个涉及到上位机和单片机直接的串口通信问题,制定好通信协议,就可以用电脑控制单片机你的电脑端,采用什么语言来编程呢,具体要控制几个灯,私信说明一下

槐荫区13116115393: 求一份基于c51单片机的蓝牙通讯程序控制led亮 -
徐终思泰: 给你推荐一种思路,很好实现.C51单片机+蓝牙串口透传模块(淘宝上有卖,十几元一片),C51单片机通过串口UART与蓝牙模块进行通信,所以只要会串口发送接收程序的编写,控制LED灯的打开和关闭就很简单.

槐荫区13116115393: 寻c语言编程:要求用两个单片机控制一个led,采用串行通讯,中断方式.功能;按一个按钮显示0按另外一个显示1 -
徐终思泰: 发送: #include "reg52.h"#define uchar unsigned char sbit K1=P1^0; sbit K2=P1^1; void delay(unsigned int a) { uchar i; while(a--) for(i=0;i<120;i++); } void main() { SCON=0x40; //串口工作在方式1(0100 0000),不允许接收 TMOD=0x20; //T1工...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网