Socket 网络交互简单示例
java中的网络信息传输方式是基于TCP协议或者UD协议P的,socket是基于TCP协议的例子1(1)客户端程序:import java.io.*;import java.net.*;public class Client{public static void main(String args[]) {String s=null; Socket mysocket; DataInputStream in=null; DataOutputStream out=null; try{ mysocket=new Socket("localhost",4331); in=new DataInputStream(mysocket.getInputStream()); out=new DataOutputStream(mysocket.getOutputStream()); out.writeUTF("你好!");//通过 out向"线路"写入信息。 while(true) { s=in.readUTF();//通过使用in读取服务器放入"线路"里的信息。堵塞状态, //除非读取到信息。 out.writeUTF(":"+Math.random()); System.out.println("客户收到:"+s); Thread.sleep(500); } } catch(IOException e) {System.out.println("无法连接"); } catch(InterruptedException e){} } }(2)服务器端程序:import java.io.*;import java.net.*;public class Server{ public static void main(String args[]){ServerSocket server=null; Socket you=null;String s=null; DataOutputStream out=null;DataInputStreamin=null; try{ server=new ServerSocket(4331);} catch(IOException e1){System.out.println("ERRO:"+e1);} try{you=server.accept(); in=new DataInputStream(you.getInputStream()); out=new DataOutputStream(you.getOutputStream()); while(true) { s=in.readUTF();// 通过使用in读取客户放入"线路"里的信息。堵塞状态, //除非读取到信息。 out.writeUTF("你好:我是服务器");//通过 out向"线路"写入信息. out.writeUTF("你说的数是:"+s); System.out.println("服务器收到:"+s); Thread.sleep(500); } } catch(IOException e) {System.out.println(""+e); } catch(InterruptedException e){} }}例子(2)(1) 客户端import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import java.applet.*;public class Computer_client extends Applet implements Runnable,ActionListener{Button 计算;TextField 输入三边长度文本框,计算结果文本框; Socket socket=null; DataInputStream in=null; DataOutputStream out=null; Thread thread; public void init() {setLayout(new GridLayout(2,2)); Panel p1=new Panel(),p2=new Panel(); 计算=new Button(" 计算"); 输入三边长度文本框=new TextField(12);计算结果文本框=new TextField(12); p1.add(new Label("输入三角形三边的长度,用逗号或空格分隔:")); p1.add( 输入三边长度文本框); p2.add(new Label("计算结果:"));p2.add(计算结果文本框);p2.add(计算); 计算.addActionListener(this); add(p1);add(p2); } public void start() {try {//和小程序所驻留的服务器建立套接字连接: socket = new Socket(this.getCodeBase().getHost(), 4331); in =new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); } catch (IOException e){} if(thread == null) {thread = new Thread(this); thread.start(); } } public void run() {String s=null; while(true) { try{s=in.readUTF();//堵塞状态,除非读取到信息。 计算结果文本框.setText(s); } catch(IOException e) {计算结果文本框.setText("与服务器已断开"); break;} }}public void actionPerformed(ActionEvent e){if(e.getSource()==计算) {String s=输入三边长度文本框.getText(); if(s!=null) {try {out.writeUTF(s); } catch(IOException e1){} } }}} (2) 服务器端import java.io.*;import java.net.*;import java.util.*;import java.sql.*;public class Computer_server {public static void main(String args[]) {ServerSocket server=null;Server_thread thread; Socket you=null; while(true) {try{server=new ServerSocket(4331); } catch(IOException e1) {System.out.println("正在监听"); //ServerSocket对象不能重复创建。 } try{you=server.accept(); System.out.println("客户的地址:"+you.getInetAddress()); } catch (IOException e) {System.out.println("正在等待客户"); } if(you!=null) {new Server_thread(you).start(); //为每个客户启动一个专门的线程。 } else {continue; } } }}class Server_thread extends Thread{Socket socket;Connection Con=null;Statement Stmt=null; DataOutputStream out=null;DataInputStreamin=null;int n=0; String s=null; Server_thread(Socket t) {socket=t; try {in=new DataInputStream(socket.getInputStream()); out=new DataOutputStream(socket.getOutputStream()); } catch (IOException e) {} } public void run() {while(true) {double a[]=new double ;int i=0; try{s=in.readUTF();堵塞状态,除非读取到信息。 StringTokenizer fenxi=new StringTokenizer(s," ,"); while(fenxi.hasMoreTokens()) {String temp=fenxi.nextToken(); try{a=Double.valueOf(temp).doubleValue();i++; } catch(NumberFormatException e){out.writeUTF("请输入数字字符"); } } double p=(a+a+a)/2.0; out.writeUTF(" "+Math.sqrt(p*(p-a)*(p-a)*(p-a))); sleep(2); } catch(InterruptedException e){} catch (IOException e) {System.out.println("客户离开");break; } } } }
这些例子都是Java2实用教程上的.
页:
[1]