现在贴工程1:
package com.net;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class NioServer {
public static final int SERVERPORT=5555;
public static final String USERNAME="wangzhirong";
public static final String PASSWORD="123456";
public static final String ISACK="ACK";
public static final String ISNAK="NAK!";
// Selector selector;//选择器
// SelectionKey key;//key。 一个key代表一个Selector 在NIO通道上的注册,类似主键;
// //取得这个Key后就可以对Selector在通道上进行操作
private ByteBuffer echoBuffer = ByteBuffer.allocate( 1024 );// 通道数据缓冲区
public NioServer(){
}
public static void main(String[] args) throws IOException {
NioServer ns=new NioServer();
ns.BuildNioServer();
}
public void BuildNioServer() throws IOException{
/////////////////////////////////////////////////////////
///////先对服务端的ServerSocket进行注册,注册到Selector ////
/////////////////////////////////////////////////////////
ServerSocketChannel ssc = ServerSocketChannel.open();//新建NIO通道
ssc.configureBlocking( false );//使通道为非阻塞
ServerSocket ss = ssc.socket();//创建基于NIO通道的socket连接
//新建socket通道的端口
ss.bind(new InetSocketAddress("127.0.0.1",SERVERPORT));
Selector selector=Selector.open();//获取一个选择器
//将NIO通道选绑定到择器,当然绑定后分配的主键为skey
SelectionKey skey = ssc.register( selector, SelectionKey.OP_ACCEPT );
////////////////////////////////////////////////////////////////////
//// 接收客户端的连接Socket,并将此Socket也接连注册到Selector ////
///////////////////////////////////////////////////////////////////
while(true){
int num = selector.select();//获取通道内是否有选择器的关心事件
if(num<1){continue; }
Set selectedKeys = selector.selectedKeys();//获取通道内关心事件的集合
Iterator it = selectedKeys.iterator();
while (it.hasNext()) {//遍历每个事件
try{
SelectionKey key = (SelectionKey)it.next();
//有一个新联接接入事件,服务端事件
if ((key.readyOps() & SelectionKey.OP_ACCEPT)
== SelectionKey.OP_ACCEPT) {
// 接收这个新连接
ServerSocketChannel serverChanel = (ServerSocketChannel)key.channel();
//从serverSocketChannel中创建出与客户端的连接socketChannel
SocketChannel sc = serverChanel.accept();
sc.configureBlocking( false );
// Add the new connection to the selector
// 把新连接注册到选择器
SelectionKey newKey = sc.register( selector,
SelectionKey.OP_READ );
it.remove();
System.out.println( "Got connection from "+sc );
}else
//读客户端数据的事件,此时有客户端发数据过来,客户端事件
if((key.readyOps() & SelectionKey.OP_READ)
== SelectionKey.OP_READ){
// 读取数据
SocketChannel sc = (SocketChannel)key.channel();
int bytesEchoed = 0;
while((bytesEchoed = sc.read(echoBuffer))> 0){
System.out.println("bytesEchoed:"+bytesEchoed);
}
echoBuffer.flip();
System.out.println("limet:"+echoBuffer.limit());
byte [] content = new byte[echoBuffer.limit()];
echoBuffer.get(content);
String result=new String(content);
doPost(result,sc);
echoBuffer.clear();
it.remove();
}
}catch(Exception e){}
}
}
}
public void doPost(String str,SocketChannel sc){
boolean isok=false;
int index=str.indexOf('|');
if(index>0){
String name=str.substring(0,index);
String pswd=str.substring(index+1);
if(pswd==null){pswd="";}
if(name!=null){
if(name.equals(USERNAME)
&& pswd.equals(PASSWORD)
){
isok=true;
}else{
isok=false;
}
}else{
isok=false;
}
}else{
isok=false;
}
String result="";
if(isok){
result="ACK";
}else{
result="NAK!";
}
ByteBuffer bb = ByteBuffer.allocate( result.length() );
bb.put(result.getBytes());
bb.flip();
try {
sc.write(bb);
} catch (IOException e) {
e.printStackTrace();
}
bb.clear();
}
}
下面贴工程2
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class UserClient implements ActionListener{
JFrame jf;
JPanel jp;
JLabel label_name;
JLabel label_pswd;
JTextField userName;
JButton jb;
JPasswordField paswrd;
JLabel hintStr;
public UserClient (){
jf=new JFrame("XXX 登陆系统");
jp=new JPanel();
jf.setContentPane(jp);
jf.setPreferredSize(new Dimension(350,220));
jp.setPreferredSize(new Dimension(350,220));
jp.setBackground(Color.gray);
label_name=new JLabel();
label_name.setPreferredSize(new Dimension(150,30));
label_name.setText("请输入帐户(数字或英文):");
userName=new JTextField();
userName.setPreferredSize(new Dimension(150,30));
jp.add(label_name);
jp.add(userName);
label_pswd=new JLabel();
label_pswd.setPreferredSize(new Dimension(150,30));
label_pswd.setText("请输入密码:");
jp.add(label_pswd);
paswrd=new JPasswordField();
paswrd.setPreferredSize(new Dimension(150,30));
jp.add(paswrd);
jb=new JButton("OK");
jb.setPreferredSize(new Dimension(150,30));
jb.setText("确 定");
jb.addActionListener( this);
jp.add(jb);
hintStr=new JLabel();
hintStr.setPreferredSize(new Dimension(210,40));
hintStr.setText("");
hintStr.setForeground(Color.RED);
jp.add(hintStr);
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private String name;
private String pswd;
public void actionPerformed(ActionEvent e) {
name=userName.getText().trim();
pswd=new String(paswrd.getPassword());
if(pswd==null){
pswd="";
}else{
pswd=pswd.trim();
}
if(name!=null && name.length()>0){
hintStr.setText("正在验证客户端,请稍候...");
start();
}
}
OutputStream os;
Socket s;
InputStream is;
public void start(){
//建立联网线程
new Thread(new Runnable(){
public void run() {
try {
s=new Socket("127.0.0.1",5555);
//写
os=s.getOutputStream();
os.write(name.getBytes());
os.write('|');//用户名与密码用"|"分隔
os.write(pswd.getBytes());
os.flush();
//读内容
Thread.sleep(1000);
is=s.getInputStream();
int len=is.available();
System.out.println("len:"+len);
byte[] bytes=new byte[len];
is.read(bytes);
String resut=new String(bytes);
System.out.println("resut:"+resut);
//TODO 这里通过返回结果处理
if(resut.equals("ACK")){
hintStr.setText("验证成功,欢迎光临!");
}else{
paswrd.setText(null);
hintStr.setText("用户名或密码错误,请重新输入");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
// try {
// os.close();
// is.close();
// s.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
}
}
}).start();
}
public static void main(String[] args) {
new UserClient();
}
}
分享到:
相关推荐
C#开发的Socket通信源码。包含客户端和服务端。基于windows系统的IOCP模型开发,吞吐性能高,稳定性强。也非常容易和第三方系统进行对接。基于SharpSocket开发。使用TCP协议,可以自动重连。
此外,Radware还提供了 CertainT100 设备来加速银企对接及B2B平台的SSL(Secure Socket Layer)过程,进一步提升了系统的安全性和性能。CertainT100同样采用冗余配置,两台设备并行工作,确保在一台设备出现故障时,...
中国银行银企对接接口规范是中国银行针对企业客户提供的一套标准化接口规范,旨在使银行系统与企业系统之间能够实现安全、高效的电子数据交换。从提供的文件内容来看,该接口规范自2012年7月22日首次发布以来,已经...
Modbus 协议是一项应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信,包括 ASCII、RTU、TCP 三种报文类型。 Modbus TCP 数据帧由 MBAP 和 PDU 两部分组成。MBAP 是报文头,长度为...
端口适配器则是将LWIP的抽象接口与STM32的具体硬件接口对接,比如以太网控制器的读写操作。 然后,建立并发服务器的关键在于理解和使用LWIP的TCP服务器API。TCP服务器需要监听特定端口,当客户端连接请求到达时,...
同时,服务器需能与现有的FTP客户端无缝对接。 FTP服务器的实现依赖于TCP/IP网络基础,尤其是Socket编程。Socket是一种通信接口,允许两个进程通过网络交换数据。在设计中,服务器端首先创建Socket,监听指定端口,...
聚合客服是强大的微信公众号客户服务功能模块,无缝对接人人商城等其他类型的商城,优化前端管理员可查询任意粉丝查看聊天记录,其他优化! 系统特点: 1、多渠道接入:wpb、手机app、电话、微信,整合到一个客服系统...
服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 数据在Internet中是以有限大小的包形式传输的,...
监控端口扫描使用 new Socket(host, port) 方法和 new ServerSocket(ListeningPort) 进程下的 ServerSocket.accept() 方法对接,port 值从 1 到 65535 循环。全端口扫描只有本地意义,使用 new ServerSocket(port) ...
- 项目需求:百货业希望通过短信平台改进传统的管理和服务方式,实现与业务系统的无缝对接,提高办公效率,增强客户服务体验。 - 系统接口:平台需提供WebService、Socket、HTTP等标准接口,允许第三方系统接入,...
- **系统接口**:为了与其他系统对接,短信平台需要提供多种接口,如WebService、Socket、HTTP,以便第三方系统接入。这些接口分别适应不同场景,如WebService的跨平台性,Socket的低带宽占用和实时性,HTTP的易用...
2、采用客服系统主流的socket机制技术,实时对话实时刷新,并非ajax轮询查询数据库(消耗大量服务器资源) 3、可对接N个公众号、小程序,且每个公众号、小程序还可添加N个客服(客服组) 4、客服一个工作台,回复...
简单说:如果你辛苦推广了一个客户,第二年到期了后,系统会自动提示他续费,而不用跑去收费.你也可以免费不限量的开试用账号,到期自动收费.系统还支持朋友推荐注册,通过朋友圈邀请传播,快速扩散宣传。
因此,本公司准备采取建设短信平台的方法改变原有的管理方法和客服机制,实现短信平台与业务系统的对接。 3.2 需求分析 3.2.1. 系统接口 考虑到建成的短信平台需要和其他进行连接,或者接收其他系统设备的故障...
- **项目需求**:百货公司希望通过短信平台改进客户服务和管理方式,对接业务系统,提升办公自动化水平。 - **接口需求**: - **二次开发接口**:提供WebService、Socket、HTTP接口,允许不同系统接入。...
【客户开发岗位职责】在互联网行业中,客户开发岗位涵盖了多个技术领域,主要涉及软件开发、硬件接口对接、应用软件设计和市场拓展等多个方面。以下是基于提供的内容,对这些职责的详细解析: 1. **深度学习软件...
1. **连接管理**:API提供了建立和维护与短信网关连接的类,如Socket连接,通常需要设置TCP/IP参数,如服务器地址、端口号等。 2. **消息编码解码**:SMGP协议的消息是二进制格式的,因此API中会包含将业务数据转换...
TCP协议在处理客户-服务器事务时存在两个主要问题。一是三次握手过程会增加一个往返时间(RTT),导致事务响应时间增加。二是由于客户端首先发起FIN报文关闭连接,客户端会在TIME_WAIT状态停留约240秒,这限制了同一...
这个岗位主要涉及深度学习相关的应用程序开发,包括深度学习框架的移植与优化以及辅助工具的开发。理想的候选人需要有3年以上的纯开发经验,拥有电子工程、计算机或自动化等相关专业的本科及以上学历。必须热爱编程...