電子商務(wù)概念seo關(guān)鍵詞有話要多少錢
?我們首先要完成服務(wù)端,不然出錯(cuò),運(yùn)行也要先運(yùn)行服務(wù)端,如果不先連接服務(wù)端,就不監(jiān)聽(tīng),那客戶端不知道連接誰(shuí)
服務(wù)端
package d21z;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;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 fwd extends JFrame implements ActionListener,KeyListener {//1.窗體組件//文本域private JTextArea wby;//滾動(dòng)條private JScrollPane gdt;//輸入面板private JPanel mb;//文本框private JTextField wbk;//按鈕private JButton an ;//輸出流private BufferedWriter BW=null;public fwd() {//將組件初始化wby=new JTextArea();//設(shè)置文本域不可編輯wby.setEditable(false);//要將文本域放到滾動(dòng)條中,實(shí)現(xiàn)滾動(dòng)效果gdt=new JScrollPane(wby);//面板mb=new JPanel();wbk=new JTextField(10);an=new JButton("發(fā)送");//文本框和按鈕要放到面板中mb.add(wbk);mb.add(an);//將滾動(dòng)條和面板放到窗體中this.add(gdt,BorderLayout.CENTER);//將文本內(nèi)容也就是滾動(dòng)條放到窗體的中間this.add(mb,BorderLayout.SOUTH);//將輸入面板放到窗體的底(南)部//窗體屬性setTitle("服務(wù)端");//標(biāo)題setSize(400,400);//窗體大小setLocation(250,200);//位置setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉方式setVisible(true);//是否顯示//發(fā)送事件an.addActionListener(this);wbk.addKeyListener(this);try {//創(chuàng)建套接字ServerSocket s=new ServerSocket(8998);Socket sk = s.accept();//獲取輸入流(讀取文本框的數(shù)據(jù))//使用BufferedReader的readLine()方法,為了一行一行讀取BufferedReader r=new BufferedReader(new InputStreamReader(sk.getInputStream()));//獲取輸出流(輸出數(shù)據(jù))也是一行一行的//BufferedWriter的newLine()方法BW=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));//循環(huán)獲取數(shù)據(jù),并拼接到文本域中String line=null;while((line=r.readLine())!=null) {//將讀取的數(shù)據(jù)拼接到文本域中wby.append(line+"\n");}//關(guān)閉s.close();sk.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void sx() {//獲取文本框的數(shù)據(jù)String text=wbk.getText();//拼接要發(fā)送的內(nèi)容text="服務(wù)端:"+text;//服務(wù)端面板顯示wby.append(text+"\n");try {//發(fā)送BW.write(text);//換行BW.newLine();//刷新BW.flush();//讓文本框?yàn)榭誻bk.setText("");}catch(IOException e1) {e1.printStackTrace();}}public static void main(String[] args) {new fwd();}@Override//按鈕事件public void actionPerformed(ActionEvent e) {sx();}//回車事件
@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode()==KeyEvent.VK_ENTER) {sx();}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}}
?客戶端
package d21z;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;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 Khd extends JFrame implements ActionListener,KeyListener{//1.窗體組件//文本域private JTextArea wby;//滾動(dòng)條private JScrollPane gdt;//輸入面板private JPanel mb;//文本框private JTextField wbk;//按鈕private JButton an ;private BufferedWriter BW=null;public Khd() {//將組件初始化wby=new JTextArea();//設(shè)置文本域不可編輯wby.setEditable(false);//要將文本域放到滾動(dòng)條中,實(shí)現(xiàn)滾動(dòng)效果gdt=new JScrollPane(wby);//面板mb=new JPanel();wbk=new JTextField(10);an=new JButton("按鈕");//文本框和按鈕要放到面板中mb.add(wbk);mb.add(an);//將滾動(dòng)條和面板放到窗體中this.add(gdt,BorderLayout.CENTER);//將文本內(nèi)容也就是滾動(dòng)條放到窗體的中間this.add(mb,BorderLayout.SOUTH);//將輸入面板放到窗體的底(南)部//窗體屬性setTitle("客戶端");//標(biāo)題setSize(400,400);//窗體大小setLocation(800,200);//位置setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉方式setVisible(true);//是否顯示//綁定一個(gè)發(fā)送的監(jiān)聽(tīng)事件an.addActionListener(this);wbk.addKeyListener(this);try {//創(chuàng)建客戶端的套接字(嘗試連接)Socket sk=new Socket("127.0.0.1",8998);//獲取Socket的輸入流BufferedReader r=new BufferedReader(new InputStreamReader(sk.getInputStream()));//獲取Socket的輸出流BW=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));//循環(huán)獲取數(shù)據(jù),并拼接到文本域中String line=null;while((line=r.readLine())!=null) {//循環(huán)讀取wby.append(line+"\n");}//關(guān)閉Socket通道sk.close();}catch(IOException e) {e.printStackTrace();};}public void sx() {//獲取文本框的數(shù)據(jù)String text=wbk.getText();//拼接要發(fā)送的內(nèi)容text="客戶端:"+text;//服務(wù)端面板顯示wby.append(text+"\n");try {//發(fā)送BW.write(text);//換行BW.newLine();//刷新BW.flush();//讓文本框?yàn)榭誻bk.setText("");}catch(IOException e1) {e1.printStackTrace();}}public static void main(String[]args) {new Khd();}@Overridepublic void actionPerformed(ActionEvent e) {sx();}@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode()==KeyEvent.VK_ENTER) {sx();}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}}
運(yùn)行結(jié)果: