java socket 多客户端和服务器的通信(一)

2014-11-24 10:11:54 · 作者: · 浏览: 0

[java]

所谓可以多客户端,就是需要在服务器端进行多线程编程,每一个客户端对应一个线程。如果要实现时时通讯和话,无论是客户端还是服务器端都要至少两个线程,主线程进行发送信息,子线程进行获取信息,这样可以保证时时通信.
下面贴出我的代码:

客户端:

[java]
package com.lip;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client
{

/**
* Author: Lip
* 客户端
*/
public static void main(String[] args)
{
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
Scanner scanner = new Scanner(System.in);// 从键盘读取
try
{
// 创建客户端socket
socket = new Socket(Server.HOST, Server.PORT);
// 读取从客户端发来的消息
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// 写入信息到服务器端
pw = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())));
new ReadServerMessage(br);// 从服务器读取消息
while (true)
{
String temp = scanner.nextLine();// 从键盘读取一行
pw.println(temp);// 写到服务器
pw.flush();
if (temp.equals("q"))
break;
}
}

catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
System.out.println("close......");
br.close();
pw.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}

}

}

class ReadServerMessage extends Thread//从服务器读取消息
{
BufferedReader bReader;
Socket socket;
public ReadServerMessage(BufferedReader br)
{
this.bReader = br;
start();
}

public void run()
{
String str = "";
while (true)//一直等待着服务器的消息
{
try
{
str = bReader.readLine();
if (str.equals("q"))
{
bReader.close();
socket.close();
break;
}
}
catch (IOExcep