运用Java中socket编程实现简单的服务器客户端收发信息程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/retuJQC/article/details/79052940

1.socket编程实现

服务器端先初始化Socket对象,再与端口绑定(bind),然后在端口进行监听(listen),调用accept阻塞,等待客户端连接。这时如果有客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author 58380
 * 
 * 服务器端
 */
public class TestServer extends JFrame {

	/**
	 * 消息显示栏
	 */
	JTextArea jta;
	
	public TestServer() {
		
		try {
		//获取界面
		this.getUi();
		
		byte[] b = new byte[1024];

		System.out.println("服务器在9999端口监听...");
		ServerSocket ss = new ServerSocket(9999);
		
		while(true) {
			//监听
			Socket socket = ss.accept();
			
			InputStream os = new DataInputStream(socket.getInputStream());
			os.read(b);
			
			String str = new String(b);
			jta.append("从客户端接收:" + str + "\n");
		}
		} catch(Exception e) {
			
			e.printStackTrace();
		}
		
	}

	/**
	 * 获取通信主界面
	 */
	private void getUi() {
		
		jta = new JTextArea();
		
		this.add(jta, "Center");
		
		this.setTitle("服务器");
		this.setSize(300, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new TestServer();
	}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * @author 58380
 * 
 * 客户端
 */
public class TestClient extends JFrame implements ActionListener {

	/**
	 * 消息输入框
	 */
	JTextField jtf;
	
	/**
	 * 发送按钮
	 */
	JButton jb;
	
	/**
	 * 消息显示栏
	 */
	JTextArea jta;
	
	/**
	 * 主Panel
	 */
	JPanel jp1;
	
	/**
	 * 副Panel
	 */
	JPanel jp2;
	
	public TestClient() {
		
		//获取界面
		this.getUi();
	}

	/**
	 * 获取通信主界面
	 */
	private void getUi() {
		
		jta = new JTextArea();
		jtf = new JTextField(15);
		jb = new JButton("发送");
		jb.addActionListener(this);

		jp2 = new JPanel();
		jp2.add(jtf);
		jp2.add(jb);
		
		this.add(jta, "Center");
		this.add(jp2, "South");
		
		this.setTitle("客户端");
		this.setSize(300, 400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		
		new TestClient();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		//触发发送按钮
		if(e.getSource() == jb) {
			
			String str = jtf.getText();
			
			if(null != str) {
					byte[] b = str.getBytes();
					try{
					Socket socket = new Socket("127.0.0.1", 9999);
					OutputStream is = new DataOutputStream(socket.getOutputStream());
					is.write(b);
				}catch(Exception e1){
					e1.printStackTrace();
				}
			jta.append("向服务器发送:" +  str + "\n");	
			}
		}
	}
}




展开阅读全文

没有更多推荐了,返回首页