欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

websocket的helloworld

程序员文章站 2024-03-23 10:31:22
...
ChatClient.java
ChatServer.java
EmptyClient.java
WebSocket.jar
index.html

index.html
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat Client</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="prototype.js"></script>

<script type="text/javascript">
document.observe("dom:loaded", function() {
function log(text) {
$("log").innerHTML = (new Date).getTime() + ": " + (!Object.isUndefined(text) && text !== null ? text : "null") +"<br>"+ $("log").innerHTML;

}

if (!window.WebSocket) {
alert("FATAL: WebSocket not natively supported. This demo will not work!");
}

var ws;

$("uriForm").observe("submit", function(e) {
e.stop();
ws = new WebSocket($F("uri"));
ws.onopen = function() {
log("[WebSocket#onopen]");
}
ws.onmessage = function(e) {
log("<b style='color:red;'>[WebSocket#onmessage] 接收消息:" + e.data + "</b>");
}
ws.onclose = function() {
log("[WebSocket#onclose]");
$("uri", "connect").invoke("enable");
$("disconnect").disable();
ws = null;
}
$("uri", "connect").invoke("disable");
$("disconnect").enable();
});

$("sendForm").observe("submit", function(e) {
e.stop();
if (ws) {
var textField = $("textField");
ws.send(textField.value);
//log("[WebSocket#send] 发送消息:" + textField.value );
textField.value = "";
textField.focus();
}
});

$("clear").observe("click", function(e) {
$("log").innerHTML ='';
});

$("disconnect").observe("click", function(e) {
e.stop();
if (ws) {
ws.close();
ws = null;
}
});
});
</script>
</head>
<body>
<form id="uriForm"><input type="text" id="uri" value="ws://localhost:8887" style="width:200px;"> <input type="submit" id="connect" value="Connect"><input type="button" id="disconnect" value="Disconnect" disabled="disabled"></form><br>
<form id="sendForm"><input type="text" id="textField" value="" style="width:200px;"> <input type="submit" value="Send"> <input type="button" id='clear' value="clear msg"></form><br>
<form><div id="log" style="width:800px;heigth:450px" ></div></form><br>
</body>
</html>



EmptyClient.java

import java.net.URI;

import org.java_websocket.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.handshake.ServerHandshake;

public class EmptyClient extends WebSocketClient {

public EmptyClient( URI serverUri , Draft draft ) {
super( serverUri, draft );
}

public EmptyClient( URI serverURI ) {
super( serverURI );
}

@Override
public void onOpen( ServerHandshake handshakedata ) {
}

@Override
public void onMessage( String message ) {
}

@Override
public void onClose( int code, String reason, boolean remote ) {
}

@Override
public void onError( Exception ex ) {
}

}

ChatServer.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.Set;

import org.java_websocket.WebSocket;
import org.java_websocket.WebSocketServer;
import org.java_websocket.handshake.ClientHandshake;

public class ChatServer extends WebSocketServer {

public ChatServer( int port ) throws UnknownHostException {
super( new InetSocketAddress( InetAddress.getByName( "localhost" ), port ) );
}

public ChatServer( InetSocketAddress address ) {
super( address );
}

@Override
public void onOpen( WebSocket conn, ClientHandshake handshake ) {
try {
this.sendToAll( "new" );
} catch ( InterruptedException ex ) {
ex.printStackTrace();
}
System.out.println( conn + " entered the room!" );
}

@Override
public void onClose( WebSocket conn, int code, String reason, boolean remote ) {
try {
this.sendToAll( conn + " has left the room!" );
} catch ( InterruptedException ex ) {
ex.printStackTrace();
}
System.out.println( conn + " has left the room!" );
}

@Override
public void onMessage( WebSocket conn, String message ) {
try {
this.sendToAll( message );
} catch ( InterruptedException ex ) {
ex.printStackTrace();
}
System.out.println( conn + ": " + message );
}


@Override
public void onError( WebSocket conn, Exception ex ) {
ex.printStackTrace();
}

public void sendToAll( String text ) throws InterruptedException {
Set<WebSocket> con = connections();
synchronized ( con ) {
for( WebSocket c : con ) {
c.send( text );
}
}
}

///////////////////////////////////////////////////////////////////////////////////////
public static void main( String[] args ) throws InterruptedException , IOException {
//连接部份
WebSocket.DEBUG = true;
int port = 8887;
try {
port = Integer.parseInt( args[ 0 ] );
} catch ( Exception ex ) { }
ChatServer s = new ChatServer( port );
s.start();
System.out.println( "ChatServer started on port: " + s.getPort() );

//服务端 发送消息处理部份
BufferedReader sysin = new BufferedReader( new InputStreamReader( System.in ) );
while ( true ) {
String in = sysin.readLine();
s.sendToAll( in );
}
}

}




import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.net.URI;
import java.net.URISyntaxException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import org.java_websocket.WebSocket;
import org.java_websocket.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_10;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.drafts.Draft_75;
import org.java_websocket.drafts.Draft_76;
import org.java_websocket.handshake.ServerHandshake;

public class ChatClient extends JFrame implements ActionListener {
private static final long serialVersionUID = -6056260699202978657L;

private final JTextField uriField;
private final JButton connect;
private final JButton close;
private final JTextArea ta;
private final JTextField chatField;
private final JComboBox draft;
private WebSocketClient cc;

public ChatClient( String defaultlocation ) {
super( "WebSocket Chat Client" );
Container c = getContentPane();
GridLayout layout = new GridLayout();
layout.setColumns( 1 );
layout.setRows( 6 );
c.setLayout( layout );

Draft[] drafts = { new Draft_17(), new Draft_10(), new Draft_76(), new Draft_75() };
draft = new JComboBox( drafts );
c.add( draft );

uriField = new JTextField();
uriField.setText( defaultlocation );
c.add( uriField );

connect = new JButton( "Connect" );
connect.addActionListener( this );
c.add( connect );

close = new JButton( "Close" );
close.addActionListener( this );
close.setEnabled( false );
c.add( close );

JScrollPane scroll = new JScrollPane();
ta = new JTextArea();
scroll.setViewportView( ta );
c.add( scroll );

chatField = new JTextField();
chatField.setText( "" );
chatField.addActionListener( this );
c.add( chatField );

java.awt.Dimension d = new java.awt.Dimension( 300, 400 );
setPreferredSize( d );
setSize( d );

addWindowListener( new java.awt.event.WindowAdapter() {
@Override
public void windowClosing( WindowEvent e ) {
if( cc != null ) {
cc.close();
}
dispose();
}
} );

setLocationRelativeTo( null );
setVisible( true );
}

public void actionPerformed( ActionEvent e ) {

if( e.getSource() == chatField ) {
if( cc != null ) {
try {
cc.send( chatField.getText() );
chatField.setText( "" );
chatField.requestFocus();
} catch ( InterruptedException ex ) {
ex.printStackTrace();
}
}

} else if( e.getSource() == connect ) {
try {
// cc = new ChatClient(new URI(uriField.getText()), area, ( Draft ) draft.getSelectedItem() );
cc = new WebSocketClient( new URI( uriField.getText() ), (Draft) draft.getSelectedItem() ) {

@Override
public void onMessage( String message ) {
ta.append( "got: " + message + "\n" );
ta.setCaretPosition( ta.getDocument().getLength() );
}

@Override
public void onOpen( ServerHandshake handshake ) {
ta.append( "You are connected to ChatServer: " + getURI() + "\n" );
ta.setCaretPosition( ta.getDocument().getLength() );
}

@Override
public void onClose( int code, String reason, boolean remote ) {
ta.append( "You have been disconnected from: " + getURI() + "; Code: " + code + " " + reason + "\n" );
ta.setCaretPosition( ta.getDocument().getLength() );
connect.setEnabled( true );
uriField.setEditable( true );
draft.setEditable( true );
close.setEnabled( false );
}

@Override
public void onError( Exception ex ) {
ta.append( "Exception occured ...\n" + ex + "\n" );
ta.setCaretPosition( ta.getDocument().getLength() );
ex.printStackTrace();
connect.setEnabled( true );
uriField.setEditable( true );
draft.setEditable( true );
close.setEnabled( false );
}
};

close.setEnabled( true );
connect.setEnabled( false );
uriField.setEditable( false );
draft.setEditable( false );
cc.connect();
} catch ( URISyntaxException ex ) {
ta.append( uriField.getText() + " is not a valid WebSocket URI\n" );
}
} else if( e.getSource() == close ) {
try {
cc.close();
} catch ( Exception ex ) {
ex.printStackTrace();
}
}
}

public static void main( String[] args ) {
WebSocket.DEBUG = true;
String location;
if( args.length != 0 ) {
location = args[ 0 ];
System.out.println( "Default server url specified: \'" + location + "\'" );
} else {
location = "ws://localhost:8887";
System.out.println( "Default server url not specified: defaulting to \'" + location + "\'" );
}
new ChatClient( location );
}

}
相关标签: websocket

上一篇: webSocket

下一篇: