socket功能介绍的简单例子

来源:互联网 发布:数据分析ppt分享 编辑:程序博客网 时间:2024/06/06 12:50

通过Socket实现服务器鱼客户端的通讯。首先,要通过启动服务器的服务,客户端才能够通过端口号与服务器进行连接。例子引用了图灵机器人的API进行知道回复

  客户段的实现代码:

public class MyClient extends JFrame implements ActionListener{



JTextArea jta;
JTextField jtf;
JButton jb;
JPanel jp;
 
Socket socket;
Scanner sc;
PrintWriter pw;
 
public MyClient(){
jta=new JTextArea();
jtf=new JTextField(15);
jb=new JButton("发送");
jp=new JPanel();
 
jp.add(jtf);
jp.add(jb);
 
JScrollPane jsp=new JScrollPane(jta);
this.add(jsp,BorderLayout.CENTER);
this.add(jp,BorderLayout.SOUTH);
 
jb.addActionListener(this);
jtf.addActionListener(this);
 
this.setTitle("客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,400);
this.setVisible(true);
 
try {
socket=new Socket("127.0.0.1",9000);

sc=new Scanner(socket.getInputStream());

pw=new PrintWriter(socket.getOutputStream(),true);


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
while(true){
String str=sc.nextLine();
 
jta.append("图灵机器人:"+str+"\r\n");
 
}
}
 
public static void main(String[] args) {
// TODO Auto-generated method stub
  new MyClient();
}


@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb||e.getSource()==jtf){
pw.println(jtf.getText());

jta.append("会飞的鱼:"+jtf.getText()+"\r\n");

jtf.setText("");
}
}


}

服务器端的代码:

public class Myserver extends JFrame implements ActionListener{


JTextArea jta;
JTextField jtf;
JLabel jl;
JButton jb;
JPanel jp;
ServerSocket ss;
Socket socket;
Scanner sc;
PrintWriter pw;
public Myserver(){
jta=new JTextArea();
jtf=new JTextField(15);
jb=new JButton("发送");

jp=new JPanel();

jl=new JLabel("自动回复");

jp.add(jl);
/*jp.add(jtf);
jp.add(jb);*/

JScrollPane jsp=new JScrollPane(jta);
   this.add(jsp,BorderLayout.CENTER);
   this.add(jp,BorderLayout.SOUTH);
   
   jb.addActionListener(this);
   jtf.addActionListener(this);
   
   this.setTitle("服务器");
   this.setSize(300,400);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setVisible(true);
   

try {
   
ss=new ServerSocket(9000);
System.out.println("等待连接");
socket=ss.accept();
System.out.println("已连接");
sc=new Scanner(socket.getInputStream());
pw=new PrintWriter(socket.getOutputStream(),true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JButton jb;
while(true){
String str=sc.nextLine();
sentquestion(str);
jta.append("客户端:"+str+"\r\n");
try {
     if(js.has("url")){
    pw.println(js.getString("text")+"  "+js.getString("url"));
jta.append("图灵小机器人:"+js.getString("text")+"\r\n"+js.getString("url")+"\r\n");
jtf.setText("");
     }else{
     pw.println(js.getString("text"));
jta.append("图灵小机器人:"+js.getString("text")+"\r\n");
jtf.setText("");
     }
   
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}



}

private void sentquestion(String str) {
// TODO Auto-generated method stub
String question=str;
 String INFO;
try {
INFO = URLEncoder.encode(question, "utf-8");
 answerQuestion(INFO);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();

     
}
JSONObject js;
private void answerQuestion(String iNFO) {
// TODO Auto-generated method stub
String APIKEY = "API"; 
String getURL = "http://www.tuling123.com/openapi/api?key=" +APIKEY +"&info=" + iNFO;
String result;
try {
result = HttpUtils.doGet(getURL);
/*System.out.println(result);*/
   js=new JSONObject(result);
  
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


public static void main(String[] args){
new Myserver();
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/* if(e.getSource()==jb||e.getSource()==jtf){
pw.println(jtf.getText());
jta.append("服务器说"+jtf.getText()+"\r\n");
jtf.setText("");
}*/

}



}

0 0