Java学习笔记_网络(2)

单向的客户端发送服务器端接收并显示,没有使用多线程

 1 import javax.swing.*;
 2 import java.awt.*;
 3 import java.io.*;
 4 import java.net.*;
 5 import java.awt.event.*;
 6
 7 public class ChatClient {
 8     private JTextArea text_area;
 9     private PrintWriter writer;
10     private Socket s;
11
12     public static void main(String[] args) {
13         ChatClient client = new ChatClient();
14         client.go();
15     }
16
17     private void go() {
18         build_gui();
19         setup_net();
20     }
21
22     private void build_gui() {
23         JFrame frame = new JFrame("Chat Client");
24         JPanel panel = new JPanel();
25         text_area = new JTextArea(1, 20);
26         panel.add(text_area);
27         JButton button = new JButton("Send");
28         button.addActionListener(new SendButtonListener());
29         panel.add(button);
30         frame.add(BorderLayout.CENTER, panel);
31         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
32         frame.setBounds(50, 50, 400, 100);
33         frame.setVisible(true);
34     }
35
36     public class SendButtonListener implements ActionListener {
37         public void actionPerformed(ActionEvent a) {
38             String msg = text_area.getText();
39             System.out.println(msg);
40             writer.println(msg);
41             writer.flush(); //如果没有则服务器端收不到消息
42         }
43     }
44
45     private void setup_net() {
46         try {
47             s = new Socket("127.0.0.1", 4242);
48             writer = new PrintWriter(s.getOutputStream());
49         } catch (IOException ex) {
50             ex.printStackTrace();
51         }
52     }
53 }
 1 import java.io.*;
 2 import java.net.*;
 3
 4 public class ChatServer {
 5
 6     public static void main(String[] args) {
 7         ChatServer server = new ChatServer();
 8         server.go();
 9     }
10
11     private void go() {
12         setup_net();
13     }
14
15     private void setup_net() {
16         try {
17             ServerSocket serverSock = new ServerSocket(4242);
18             while (true) {
19                 Socket s = serverSock.accept();
20                 System.out.println("client connected");
21                 InputStreamReader streamReader = new InputStreamReader( s.getInputStream() );
22                 BufferedReader reader = new BufferedReader( streamReader );
23                 String msg;
24                 try { //如果没有这个try则当客户端关闭后会异常退出
25                     while ( (msg = reader.readLine()) != null ) {
26                         System.out.println(msg);
27                     }
28                 } catch (IOException ex) { System.out.println("client disconnected"); }
29             }
30         } catch (IOException ex) {
31             ex.printStackTrace();
32         }
33     }
34 }
时间: 2024-12-19 22:05:01

Java学习笔记_网络(2)的相关文章

Java学习笔记_网络+多线程

支持同时收发的客户端和服务器端 客户端 1 import javax.swing.*; 2 import java.awt.*; 3 import java.io.*; 4 import java.net.*; 5 import java.awt.event.*; 6 7 public class ChatClient { 8 private JTextArea incoming; 9 private JTextField outgoing; 10 private PrintWriter wri

java学习笔记_序列化

如果父类没有实现Serializable接口,子类实现了Serializable接口,那么子类是可以序列化的. 但是如果想要反序列化,那么就需要父类支持默认构造函数. 因为在反序列化的过程中不会调用子类的构造函数,而会以不带参数的形式调用父类的构造函数. 1 public class dog { 2 public dog(String n) { name = n; } 3 public dog() { name = ""; } 4 public String name; 5 } 1 i

Java学习笔记(3)----网络套接字服务器多线程版本

本例给出一个客户端程序和一个服务器程序.客户端向服务器发送数据.服务器接收数据,并用它来生成一个结果,然后将这个结果返回给客户端.客户端在控制台上显示结果.在本例中,客户端发送的数据是圆的半径,服务器生成的结果是圆的面积. 客户端通过输出流套接字的 DataOuputStream 发送半径,服务器通过输入流套接字的 DataInputStream 接收半径.服务器计算面积,然后,通过输出流套接字的 DataOutputStream 把它发送给客户端,客户端通过输入流套接字的 DataInputS

java学习笔记_内存分析

程序执行时内存一般被分为4部分 代码区(code segment):存放代码 数据区(data segment):静态变量和字符串常量 栈(stack): 存放局部变量 堆(heap):动态生成内存(new出来的东西) 代码如下: public class Person{ int id; int age; Person(int _id,int _age){ id = _id; age = _age; } public static void main(String[] args){ Person

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

九、Android学习笔记_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

java学习笔记16--异常

java学习笔记16--异常 异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失, 所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序正常的执行. 异常类的继承结构 在整个java的异常结构中,实际上有以下两个最常用的类:Exception.Error,这两个类全都是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try...catch处理. Error:一般指

Java 学习笔记(2015.7.20~24)

Java 学习笔记(2015.7.20~24) Java Java 学习笔记(2015.7.20~24) 1.StringBuffer与StringBuilder的区别: 2.基本数据类型包装类 3.Date.Calendar.DateFormat等与时间相关的类 1.常用类String 2.正则表达式 3.常用类 StringBuffer 代表可变的字符序列 拆箱与装箱 包装类的应用 匿名内部类 数组 day11 day12 day13 day14 day11 父类中使用public定义的方法

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位