簡單服務器與客戶端傳輸信息
Test4.java
~~~
package chat.a3;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Test4 extends JFrame implements ActionListener{
JTextArea jta =null;//文本域
JButton jb =null;//按鈕
JTextField jtf=null;//文本框
JPanel jp =null;//標簽
JScrollPane jsp=null;//滾動條
PrintWriter pw=null;
public static void main(String[] args) {
Test4 t = new Test4();
}
public Test4(){
jta =new JTextArea();
jb =new JButton("發送");
jb.addActionListener(this);
jtf =new JTextField(20);
jp =new JPanel();
jp.add(jtf);jp.add(jb);
jsp =new JScrollPane(jta);
this.add(jsp);this.add(jp,"South");
this.setTitle("服務器端");
this.setSize(350,250);
this.setLocation(300, 200);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
ServerSocket ss=new ServerSocket(9999);
Socket s=ss.accept();//接收服務器傳過來的信息
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
pw =new PrintWriter(s.getOutputStream(),true);
while(true){
String xinxi=br.readLine();
jta.append("客戶端對我說:"+xinxi+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb){
String xinxi =jtf.getText();
jta.append("我對客戶端說:"+xinxi+"\r\n");
pw.println(xinxi);
jtf.setText("");//清空文本框
}
}
}
~~~
Test5.java
~~~
package chat.a3;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Test5 extends JFrame implements ActionListener{
JTextArea jta =null;//文本域
JButton jb =null;//按鈕
JTextField jtf=null;//文本框
JPanel jp =null;//標簽
JScrollPane jsp=null;//滾動條
PrintWriter pw=null;
public static void main(String[] args) {
Test5 t = new Test5();
}
public Test5(){
jta =new JTextArea();
jb =new JButton("發送");
jb.addActionListener(this);
jtf =new JTextField(20);
jp =new JPanel();
jp.add(jtf);jp.add(jb);
jsp =new JScrollPane(jta);
this.add(jsp,"Center");this.add(jp,"South");
this.setTitle("客戶端");
this.setSize(350,250);
this.setLocation(300, 200);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
Socket s=new Socket("127.0.0.1",9999);
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
pw =new PrintWriter(s.getOutputStream(),true);
while(true){
String xinxi=br.readLine();
jta.append("服務器對我說:"+xinxi+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb){
String xinxi =jtf.getText();
jta.append("我對服務器說:"+xinxi+"\r\n");
pw.println(xinxi);
jtf.setText("");//清空文本框
}
}
}
~~~
先啟動服務器Test.java,再啟動客戶端Test1.java
結果:

- 書寫心得
- 基礎回顧
- 異常的處理
- equils方法
- 集合類
- ArrayList的遍歷和添加
- ArrayList的刪除插入
- 實例:食品庫存管理
- HashMap
- 集合類的區別和選擇
- 泛型和反射機制
- 圖形化用戶界面(GUI)
- JFrame容器
- 邊界布局管理器
- 流式布局管理器
- 網格布局管理器
- Jpanel面板
- 文本框和標簽
- 單選按鈕和復選按鈕
- 下拉列表框和滾動條
- 拆分窗口
- 聊天窗口
- 用戶登錄界面
- 記事本界面
- 線程
- 創建線程的方法
- 線程的優先級
- 線程的睡眠
- 線程的讓步與阻塞
- 買票問題
- 生產消費問題
- IO流
- 字符流
- 字節流
- 緩沖流
- 數據流傳輸
- 轉換流
- 空字符串區別
- Print流
- Object
- IO流補充
- 繪圖技術和事件處理機制
- 繪圖基礎-繪制圖形
- 繪圖基礎-繪制圖像
- 繪圖基礎-繪制文字
- 事件處理-事件監聽
- 事件處理-控件事件
- 事件處理-鍵盤事件
- 事件處理-鼠標事件
- 事件處理-窗口事件
- 記事本
- 坦克大戰
- 階段1
- 階段2
- 階段3
- 階段4
- 階段5
- 階段6
- 階段7
- 階段8
- 階段9
- 階段10
- 階段11
- 階段12
- 階段13
- 階段14
- SQL Server 2005
- 簡易學生管理系統
- 階段(1)-顯示
- 階段(2)-查詢
- 階段(3)-添加
- 階段(4)-刪除
- 階段(5)-修改
- 簡易餐飲管理系統
- 階段-01
- 階段-02
- 階段-03
- 階段-04
- Index.java
- Login.java
- Main.java
- MyFont.java
- ImagePanel.java
- Conn.java
- Moxing.java
- 網絡編程基礎
- 互發信息(1)-傳輸
- 互發信息(2)-互發
- 互發信息(3)-GUI
- 互發信息(4)-對象流
- 網絡聊天工具
- 階段--01--界面
- Server
- Index
- Client
- Login
- Chat
- List