六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 45|回复: 0

Socket高级编程 多客户端

[复制链接]

升级  0%

56

主题

56

主题

56

主题

举人

Rank: 3Rank: 3

积分
200
 楼主| 发表于 2013-1-15 02:55:30 | 显示全部楼层 |阅读模式
客户端:

package com.wlh.test;import java.io.*;import java.net.*;public class talkclient{public static void main(String args[]){try{Socket socket = new Socket("192.168.13.123",9999);BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));PrintWriter os = new PrintWriter(socket.getOutputStream());BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));String readline;while (!"bye".equals(readline=sin.readLine())){//==============写服务端==================//os.println(readline);os.flush();//==============读服务端==================//System.out.println("服务端反馈:"+is.readLine());}os.close();is.close();socket.close();}catch(Exception e){System.out.println("Error" + e);}}}

服务端:负责接收多个客户端的连接 ,然后交给多线程去处理
package com.wlh.test;import java.io.*;import java.net.*;//引入了无关的类import java.applet.Applet;public class talkserver {static int clientnum = 0; // 静态成员变量,记录当前客户的个数public static void main(String args[]) {ServerSocket server = null;try {server = new ServerSocket(9999);} catch (IOException e1) {e1.printStackTrace();}   while(true){try {Socket socket = server.accept();System.out.println("一个客户端连上来了....");ServerThread thread=new ServerThread(socket);//thread.start();} catch (IOException e) {e.printStackTrace();}   }}}


多线程程序:

package com.wlh.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;/** * 服务器端逻辑线程 */public class ServerThread extends Thread {Socket socket;BufferedReader br=null;PrintWriter os=null;public ServerThread(Socket socket) {this.socket = socket;start(); //启动线程}public void run() {BufferedReader is=null;PrintWriter os=null;try {boolean flag=true;//ServerSocket server = null;//Socket socket = null;//ServerSocket server = new ServerSocket(9999);System.out.println("server listen on port 9999...");//socket = server.accept();is = new BufferedReader(new InputStreamReader(socket.getInputStream()));    os = new PrintWriter(socket.getOutputStream());   while(flag){ System.out.println("-------------------");   //多线程  //new ServerThread(socket, clientnum).start();       //标准输入端读取一行     BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));String str;String reply;while(!"".equals(str=is.readLine())){System.out.println(".....start...........");    System.out.println(str); //每写一行,就等着从客户端读进一行,    //====向客户端反馈读到的信息=====//  os.println("服务端已经收到:"+str);  os.flush();    //=======从控制台读取信息==========//  //reply=sin.readLine(); //os.println("服务端 说:"+reply); //写到客户端//os.flush();System.out.println("......end.........");}System.out.println("out of while...");  //String line=sin.readLine();os.println("server AAAAAAAAAAAAA"); //写到客户端os.flush();}//****流如果关闭,socket也将会关闭,所以如果想在一个socket连接之内通讯*****//,    //***则应该在while之外关闭socket****////server.close();} catch (Exception e) {System.out.println("Error" + e);}finally{try {is.close();os.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}/** * 关闭流和连接 */private void close() {try {//关闭流和连接os.close();br.close();socket.close();} catch (Exception e) {}}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表