java Socket簡易聊天工具
更新時間:2016年10月24日 17:05:12 作者:戎碼人生
這篇文章主要為大家詳細介紹了java Socket簡易聊天工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了一款Socket簡易聊天工具,希望大家喜歡。
代碼運行如圖,看起來還不錯

服務端
package qiu;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Printable;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 簡單聊天軟件的服務器
* */
public class MyServer extends JFrame implements ActionListener{
JTextArea jTextArea =null;//用來顯示純文本的單行區(qū)域
JTextField jTextField=null;//可以允許用來編輯單行文本
JButton sendButton=null;
JPanel jPanel=null;
JScrollPane jScrollPane =null;
//把信息發(fā)給客戶端對象
PrintWriter printWriter =null;
/**
* 服務端的主函數(shù)
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyServer();
}
/**
* 服務端的構(gòu)造函數(shù),用來進行初始化
* */
public MyServer(){
//這里是對GUI的初始化
jTextArea = new JTextArea();
jTextField= new JTextField(20);
sendButton= new JButton("發(fā)送");
sendButton.addActionListener(this);
sendButton.setActionCommand("send");
jScrollPane= new JScrollPane(jTextArea);
jPanel = new JPanel();
jPanel.add(jTextField);//添加編輯框
jPanel.add(sendButton);//添加按鈕
//將兩個面板添加布局
this.add(jScrollPane,BorderLayout.CENTER);
this.add(jPanel,BorderLayout.SOUTH);
this.setSize(400,300);
this.setTitle("聊天服務器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置退出按鈕
this.setVisible(true);
this.setResizable(true);
//下面是socket服務器的搭建
try {
//服務器監(jiān)聽
ServerSocket ss = new ServerSocket(9988);
//等待客戶端連接
Socket socket = ss.accept();
//獲得客戶端發(fā)送過來的數(shù)據(jù)的流
BufferedReader br = new BufferedReader
(new InputStreamReader(socket.getInputStream()));
printWriter = new PrintWriter(socket.getOutputStream(),true);
//讀取從客戶端發(fā)送過來的信息
while(true){
String info = br.readLine();
jTextArea.append("客戶端 "+getTime()+"\r\n"+info+"\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
/**
* 用來獲取當前的時間
* @return 當前的時間
*/
public String getTime(){
//可以對每個單獨時間域進行修改
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);//獲取小時
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+minute+":"+second;
}
/**
* 當button被點擊的時候調(diào)用
*/
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//當按鈕按下的時候調(diào)用
if(e.getActionCommand().equals("send")){
//把服務器在jTextField寫的內(nèi)容發(fā)送給客戶端
String info= jTextField.getText();
jTextArea.append("服務器 "+getTime()+"\r\n"+info+"\r\n");
printWriter.println(info);
//清楚發(fā)送框內(nèi)容
jTextField.setText("");
}
}
}
客戶端
package qiu;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 簡單聊天軟件的客戶端
* */
public class MyClient extends JFrame implements ActionListener{
JTextArea jTextArea=null;
JTextField jTextField=null;
JPanel jPanel=null;
JScrollPane jScrollPane=null;
JButton sendButton=null;
PrintWriter printWriter=null;
/**
* 客戶端的主函數(shù)
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyClient();
}
/**
* 客戶端構(gòu)造函數(shù)用來初始化
* */
public MyClient(){
//GUI初始化
jTextArea= new JTextArea();
jTextField=new JTextField(20);
sendButton= new JButton("發(fā)送");
sendButton.addActionListener(this);
sendButton.setActionCommand("send");
jScrollPane=new JScrollPane(jTextArea);
jPanel=new JPanel();
jPanel.add(jTextField);
jPanel.add(sendButton);
this.add(jScrollPane,BorderLayout.CENTER);
this.add(jPanel,BorderLayout.SOUTH);
this.setSize(400, 300);
this.setTitle("聊天客戶端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(true);
//socket通信代碼
try {
Socket s= new Socket("127.0.0.1",9988);
BufferedReader br = new BufferedReader
(new InputStreamReader(s.getInputStream()));
printWriter= new PrintWriter(s.getOutputStream(),true);
while(true){
//不停的讀取服務器發(fā)過來的信息
String string=br.readLine();
jTextArea.append("服務器 "+getTime()+"\r\n"+string+"\r\n");
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 用來獲取當前的時間
* @return 當前的時間
*/
public String getTime(){
//可以對每個單獨時間域進行修改
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);//獲取小時
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+minute+":"+second;
}
/**
* 當button被點擊的時候調(diào)用
*/
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(sendButton.getActionCommand().equals("send")){
String info= jTextField.getText();
//將客戶端發(fā)送的信息發(fā)送給服務端
jTextArea.append("客戶端 "+getTime()+"\r\n"+info+"\r\n");
printWriter.println(info);
jTextField.setText("");
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Java對象在內(nèi)存中的布局是如何實現(xiàn)的?
Java對象在內(nèi)存中屬于oop-klass二分模型,即對象的實例數(shù)據(jù)和對象類型的元數(shù)據(jù)(字段定義、方法、常量池等元數(shù)據(jù))是分開存儲的.而由于JVM對對象內(nèi)相同寬度的字段分配在一起,所以只要指定了字段類型分配的順序,就可以計算出每種類型字段相對于當前對象的偏移起始位置2021-06-06
struts2.2.3+spring3.1.0+mybatis3.1.0框架整合集成簡單demo
本篇文章主要介紹了struts2.2.3+spring3.1.0 + mybatis3.1.0框架整合,結(jié)合在一起實現(xiàn)用戶的增刪改查功能,有需要的可以了解一下。2016-11-11

