简单的服务器和客户端程序代码实例
练习Socket,DataInputStream,DataOutputStream,Thread,ActionListener的应用,功能很简单就是客户端输入用户名回车服务器校验用户名是否合法,我定义了只有jiqimiao时才是合法的。
服务器端代码如下:
import
java.awt.
*
;
import java.io. * ;
import java.net. * ;
import java.util. * ;
import javax.swing. * ;
/**
*服务器端程序
* @author 左杰
*
*/
public class TestServer extends JFrame{
/**
*
*/
private static final long serialVersionUID = - 4148974450944551683L ;
private JTextAreajta = new JTextArea();
public static void main(String[]args){
new TestServer();
}
public TestServer(){
this .getContentPane().setLayout( new BorderLayout());
this .getContentPane().add( new JScrollPane(jta),BorderLayout.CENTER);
setTitle( " server " );
setSize( 500 , 300 );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible( true );
try {
ServerSocketserverSocket = new ServerSocket( 5000 ); // 绑定服务器端口
jta.append( " serverstartat " + new Date() + " " );
while ( true ){
Socketsocket = serverSocket.accept(); // 服务器监听
// 启动监听线程
HandleClintthread = new HandleClint(socket);
thread.start();
}
} catch (Exceptione){
// TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*接收和发送客户端的线程
* @author 左杰
*
*/
class HandleClint extends Thread{
private Socketsocket;
public HandleClint(Socketsocket){
this .socket = socket;
}
public void run(){
try {
DataInputStreaminputFromClient = new DataInputStream(socket
.getInputStream());
DataOutputStreamoutputToClient = new DataOutputStream(socket
.getOutputStream());
while ( true ){
Stringins = DataInputStream.readUTF(inputFromClient); // 接收客户端信息
Stringouts = " 您不是合法用户 " ;
if (ins.equals( " jiqimiao " )){
outs = " 欢迎您: " + ins;
}
outputToClient.writeUTF(outs); // 发送到客户端信息
jta.append(outs + " " );
}
} catch (Exceptione){
}
}
}
}
import java.io. * ;
import java.net. * ;
import java.util. * ;
import javax.swing. * ;
/**
*服务器端程序
* @author 左杰
*
*/
public class TestServer extends JFrame{
/**
*
*/
private static final long serialVersionUID = - 4148974450944551683L ;
private JTextAreajta = new JTextArea();
public static void main(String[]args){
new TestServer();
}
public TestServer(){
this .getContentPane().setLayout( new BorderLayout());
this .getContentPane().add( new JScrollPane(jta),BorderLayout.CENTER);
setTitle( " server " );
setSize( 500 , 300 );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible( true );
try {
ServerSocketserverSocket = new ServerSocket( 5000 ); // 绑定服务器端口
jta.append( " serverstartat " + new Date() + " " );
while ( true ){
Socketsocket = serverSocket.accept(); // 服务器监听
// 启动监听线程
HandleClintthread = new HandleClint(socket);
thread.start();
}
} catch (Exceptione){
// TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*接收和发送客户端的线程
* @author 左杰
*
*/
class HandleClint extends Thread{
private Socketsocket;
public HandleClint(Socketsocket){
this .socket = socket;
}
public void run(){
try {
DataInputStreaminputFromClient = new DataInputStream(socket
.getInputStream());
DataOutputStreamoutputToClient = new DataOutputStream(socket
.getOutputStream());
while ( true ){
Stringins = DataInputStream.readUTF(inputFromClient); // 接收客户端信息
Stringouts = " 您不是合法用户 " ;
if (ins.equals( " jiqimiao " )){
outs = " 欢迎您: " + ins;
}
outputToClient.writeUTF(outs); // 发送到客户端信息
jta.append(outs + " " );
}
} catch (Exceptione){
}
}
}
}
客户端代码如下:
import
java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
*客户端程序
* @author 左杰
*
*/
public class TestClient extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = - 1751294222460334070L ;
private JTextAreajta = new JTextArea();
private JTextFieldjtf = new JTextField();
private DataOutputStreamtoServer;
private DataInputStreamfromServer;
public static void main(String[]args){
new TestClient();
}
public TestClient(){
JPanelp = new JPanel();
p.setLayout( new BorderLayout());
p.add( new JLabel( " 请输入用户名: " ),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
this .getContentPane().setLayout( new BorderLayout());
this .getContentPane().add(p,BorderLayout.NORTH);
this .getContentPane().add( new JScrollPane(jta),BorderLayout.CENTER);
jtf.addActionListener( this ); // 添加事件侦听
setTitle( " Client " );
setSize( 500 , 300 );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible( true );
try {
Socketsocket = new Socket( " localhost " , 5000 ); // 链接指定服务器和端口
this .fromServer = new DataInputStream(socket.getInputStream());
this .toServer = new DataOutputStream(socket.getOutputStream());
} catch (IOExceptione){
// TODOAuto-generatedcatchblock
jta.append(e.toString() + " " );
}
}
public void actionPerformed(ActionEvente){ // 定义侦听器
if (e.getSource() instanceof JTextField){
try {
Stringtos = jtf.getText().trim();
toServer.writeUTF(tos);
toServer.flush();
Stringgets = DataInputStream.readUTF(fromServer);;
jta.append(gets + " " );
} catch (IOExceptione1){
// TODOAuto-generatedcatchblock
System.err.println(e1);
}
}
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
*客户端程序
* @author 左杰
*
*/
public class TestClient extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = - 1751294222460334070L ;
private JTextAreajta = new JTextArea();
private JTextFieldjtf = new JTextField();
private DataOutputStreamtoServer;
private DataInputStreamfromServer;
public static void main(String[]args){
new TestClient();
}
public TestClient(){
JPanelp = new JPanel();
p.setLayout( new BorderLayout());
p.add( new JLabel( " 请输入用户名: " ),BorderLayout.WEST);
p.add(jtf,BorderLayout.CENTER);
jtf.setHorizontalAlignment(JTextField.LEFT);
this .getContentPane().setLayout( new BorderLayout());
this .getContentPane().add(p,BorderLayout.NORTH);
this .getContentPane().add( new JScrollPane(jta),BorderLayout.CENTER);
jtf.addActionListener( this ); // 添加事件侦听
setTitle( " Client " );
setSize( 500 , 300 );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible( true );
try {
Socketsocket = new Socket( " localhost " , 5000 ); // 链接指定服务器和端口
this .fromServer = new DataInputStream(socket.getInputStream());
this .toServer = new DataOutputStream(socket.getOutputStream());
} catch (IOExceptione){
// TODOAuto-generatedcatchblock
jta.append(e.toString() + " " );
}
}
public void actionPerformed(ActionEvente){ // 定义侦听器
if (e.getSource() instanceof JTextField){
try {
Stringtos = jtf.getText().trim();
toServer.writeUTF(tos);
toServer.flush();
Stringgets = DataInputStream.readUTF(fromServer);;
jta.append(gets + " " );
} catch (IOExceptione1){
// TODOAuto-generatedcatchblock
System.err.println(e1);
}
}
}
}
大家共同学习,共同进步。