用Socket实现程序之间的交互(通信)
2014-09-23 13:42
204 查看
一 实现一对一服务器向客户端单向传输数据服务器端代码
</pre><pre name="code" class="java">
</pre>客户端代码<p></p><p></p><pre name="code" class="java" style="font-size:14px;">import java.io.*; import java.net.Socket; public class MyDemo { public static void main(String []args) throws Exception{ //连接服务器172.20.4.56是要链接的服务器的地址 Socket socket=new Socket("172.20.4.56", 10010); //new ThreadDemo(socket).start(); //System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换, //然后再使用BufferedReader为其增加缓冲功能(控制台的数据会先写到缓存中) BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); ////PrintWriter是带格式的输出流,是字符流的一种,特别适合网络中字符数据的发送 //因为这个流的最大特点是自动刷新缓存,而不需要我们手动刷新 //而是每次遇到回车换行的时候自动刷新缓存,发送信息 //另外这个流还有个小特点,就是在执行过程中即使出现了异常也不会报出来,而是直接压制在这个流的内部 PrintWriter out=new PrintWriter(socket.getOutputStream(), true); //BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); //输入信息到服务器 while(true){ String msg=br.readLine();
//很奇怪的写法,注意不是System.out.println,不过概念差不多 //只不过这里是输出到了服务器而已,println都是表示输出后换行 out.println("客户端:"+msg);//输出到服务器}}}二 实现一对一服务器和客户端双向通信因为客户端和服务器端同时进行收发两个操作,所以要采用线程服务器端代码
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket;//服务器端的Socket类,其对象表示一个具体的服务器程序 import java.net.Socket;//客户端的Socket,其对象表示一个具体的客户端程序 import java.util.ArrayList; //服务器程序可以通过Socket实现于其对应的客户端进行沟通和传输 //服务器程序 public class Demo { public static void main(String[]args)throws Exception { //创建服务器Socket对象,同时指定当前服务器程序的标识端口(范围65535之内的整数都可以) ServerSocket server=new ServerSocket(10010); System.out.println("服务器已经启动"); //等待客户端连接,如果客户端没有来,那么程序会在accept()处阻塞(等待状态,不继续后续语句) //而如果客户端连接到了,那么accept会返回代表客户端的Scoket对象 System.out.println("等待客户连接..."); Socket client=server.accept(); new MyThread(client).start(); //服务器数据发送 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); PrintWriter out=new PrintWriter(client.getOutputStream(),true); while(true){ String inputMsg=br.readLine(); out.println("服务器:"+inputMsg); } } } class MyThread extends Thread{ Socket client; public MyThread(Socket client){ this.client=client; } public void run(){ try{ //客户端的数据读取 BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); while(true){ String msg=in.readLine(); System.out.println(msg); } }catch(Exception e){ e.printStackTrace(); } } }客户端代码
import java.net.Socket; import java.io.*; //客户端 public class Demo { public static void main(String[]args)throws Exception{ //连接服务器 Socket socket=new Socket("172.20.4.56", 10010); //然后通过连接到服务器的socket对象进行数据传输和操作..... new MyThread(socket).start(); //向服务器发送信息 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); PrintWriter out=new PrintWriter(socket.getOutputStream(), true); while(true){ String msg=br.readLine(); out.println("客户端:"+msg);
} } } class MyThread extends Thread{ Socket client; public MyThread(Socket client){ this.client=client; } public void run(){ try{ BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); while(true){ String msg=in.readLine(); System.out.println(msg); } }catch(Exception e){ e.printStackTrace(); } }实现一对多服务器向多个客户端发送数据一个客户向服务器发送数据,服务器再将这个数据发送给其他客户端服务器端代码
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; //服务器程序可以通过Socket实现于其对应的客户端进行沟通和传输 //服务器程序 public class Demo { public static void main(String[]args)throws Exception { //创建服务器Socket对象,同时指定当前服务器程序的标识端口(范围65535之内的整数都可以) ServerSocket server=new ServerSocket(10010); System.out.println("服务器已经启动"); //等待客户端连接,如果客户端没有来,那么程序会在accept()处阻塞(等待状态,不继续后续语句) //而如果客户端连接到了,那么accept会返回代表客户端的Scoket对象 System.out.println("等待客户连接..."); ArrayList clients=new ArrayList(); while(true){ Socket client=server.accept(); clients.add(client); new MyTask(client,clients).start(); } } } class MyTask extends Thread{ private Socket client; private ArrayList clients; public MyTask(Socket client,ArrayList clients){ this.client=client; this.clients=clients; } public void run(){ try{ //接收当前客户端发送的信息 BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); while(true){ String msg=in.readLine(); //转发给其他客户端 for(int i=0;i<clients.size();i++){ Socket s=(Socket)clients.get(i); if(client==s){ continue; } PrintWriter out=new PrintWriter(s.getOutputStream(),true); out.println(msg); } } }catch(Exception e){ e.printStackTrace(); } } } class MyThread extends Thread{ Socket client; public MyThread(Socket client){ this.client=client; } public void run(){ try{ BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream())); while(true){ String msg=in.readLine(); System.out.println(msg); } }catch(Exception e){ e.printStackTrace(); } } }客户端代码(继续使用第二个的代码也可以,这里多加了昵称等,以便区分是哪个客户端发送的)
import java.net.Socket;import java.io.*;public class Demo {public static void main(String[]args)throws Exception{Socket socket=new Socket("172.20.4.95", 10086);BufferedReader br=new BufferedReader(new InputStreamReader(System.in));System.out.print("请输入昵称:");String name=br.readLine();new MyThread(socket).start();PrintWriter out=new PrintWriter(socket.getOutputStream(), true);while(true){String msg=br.readLine();out.println(name+":"+msg);}}}class MyThread extends Thread{Socket client;public MyThread(Socket client){this.client=client;}public void run(){try{BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));while(true){String msg=in.readLine();System.out.println(msg);}}catch(Exception e){e.printStackTrace();}}}
相关文章推荐
- socket实现C/S模型的通信程序
- Silverlight 程序之:基于 Silverlight 的本地应用程序之间实现通信
- 应用层――使用 Socket 通信实现 FTP 客户端程序
- 在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 用VB实现程序之间的简单通信
- socket编程 实现windows和linux服务器之间的通信
- 主题:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序!
- 转载:在Android上实现SSL握手(客户端需要密钥和证书),实现服务器和客户端之间Socket交互
- linux下socket实现TCP通信的简单程序接口封装
- 在Android上实现SSL握手,实现服务器和客户端之间Socket交互
- Linux 管道替换标准输入输出 实现2个独立程序代码之间的通信
- Java 的Socket实现内网和外网之间的通信(说明)
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)