【Java基础学习笔记】Java中Socket+Swing设计简单通信

在《Java从入门到精通(第3版)》的原书中,客户端仅能发送一次数据,我在此基础上修改了一点点,实现了多次发送数据的单向通讯。

1. 服务器端

package Tcp_IP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Date;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.SimpleTimeZone;

import com.sun.org.apache.bcel.internal.generic.NEW;

import javafx.beans.binding.When;
import IO_Test.bufferread;

public class My_Server {
	private BufferedReader reader;
	private ServerSocket Ser_Sock;
	private Socket socket;

	void My_Server() {
		// TODO Auto-generated constructor stub
		try {
			Ser_Sock = new ServerSocket(8766);
			System.out.println("等待客户连接中···");
			socket = Ser_Sock.accept();	
				reader = new BufferedReader
						(new InputStreamReader(socket.getInputStream()));
				while(reader!=null){
					SimpleDateFormat forma = 
							new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
					System.out.println("连接成功:"+forma.format(new java.util.Date()));
					System.out.println("获得客户端信息为:"+reader.readLine());
				}
				reader.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		 
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		My_Server SV = new My_Server();
		SV.My_Server();
	}

}

2. 客户端

package Tcp_IP;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class My_Client extends JFrame{
	Socket socket;
	private JTextArea ta = new JTextArea();
	private JTextField tf = new JTextField();
	private PrintWriter writer;
	Container c;

	public My_Client(String titl) {
		// TODO Auto-generated constructor stub
		super(titl);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		c = getContentPane();
		final JScrollPane  scollpane = new JScrollPane();
		scollpane.setBorder(new BevelBorder(BevelBorder.RAISED));
		getContentPane().add(scollpane, BorderLayout.CENTER);
		scollpane.setViewportView(ta);
		c.add(tf, "South");
		ta.append("尝试连接\n");
		try {
			socket = new Socket("127.0.0.1", 8766);
		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		ta.append("已连接,请输入发送信息\n");
		tf.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				
				try {
					writer = new PrintWriter(socket.getOutputStream(), true);
					writer.println(tf.getText());
					
					ta.append(tf.getText()+"\n");
					ta.setSelectionEnd(tf.getText().length());
					tf.setText("");} 
				catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		My_Client client = new My_Client("连接服务器");
		client.setSize(200, 200);
		client.setVisible(true);
	}
}

3. 运行效果










  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值