【Java基础学习笔记】Java中Socket+Swing设计简单通信
2015-07-14 16:35
946 查看
在《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. 运行效果
相关文章推荐
- Java创建以及读写xml文档(dom方式)
- Java防盗链机制
- java使用链栈实现迷宫求解
- java 生成excel
- Java ArrayList 源码分析
- 常见错误总结_1_对java类进行修改后,无法按修改的类型加载
- java文件处理测试
- Spring Quartz动态配置时间
- java执行cmd命令,返回结果中文乱码问题解决
- SpringMVC中的异步提交表单
- java集合体系与C#集合比较
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- 如何在eclipse jee中检出项目并转换为Maven project,最后转换为Dynamic web project
- 整理的一些java中常使用jar包以及说明
- jdk源码阅读-HashMap
- Maven那点事儿(Eclipse版)
- MyEclipse连接不上genymotion的解决方案
- spring3整合quartz2,实现动态添加、修改、暂停、重启定时任务
- eclipse JAVA NDK build path
- Java两种延时——thread和timer