java多线程与socket_java多线程与Socket结合的简单示例

java:多线程与Socket结合的简单示例

import java.io.*;

import http://www.doczj.com/doc/39cf1f51be23482fb4da4c26.html.*;

public class MyServer {

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(5678);

Socket client = server.accept();

BufferedReader in = new BufferedReader(new InputStreamReader(client

.getInputStream()));

PrintWriter out = new PrintWriter(client.getOutputStream());

while (true) {

String str = in.readLine();

System.out.println(str);

out.println("has receive...");

out.flush();

if (str.equals("end"))

break;

}

client.close();

}

}

import http://www.doczj.com/doc/39cf1f51be23482fb4da4c26.html.*;

import java.io.*;

public class Client {

static Socket server;

public static void main(String[] args) throws Exception {

server = new Socket(InetAddress.getLocalHost(), 5678);

BufferedReader in = new BufferedReader(new InputStreamReader(server

.getInputStream()));

PrintWriter out = new PrintWriter(server.getOutputStream());

BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));

while (true) {

String str = wt.readLine();

out.println(str);

out.flush();

if (str.equals("end")) {

break;

}

System.out.println(in.readLine());

}

server.close();

}

}

客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"end"用来做退出标识。这个程序只是简单的两台计算机之间的通讯。如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的。那么多个客户端如何实现呢? 其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Socket本身。而服务器通过accept方法就是同意和客户建立通讯。这样当客户建立Socket的同时。服务器

也会使用这一根连线来先后通讯。那么既然如此只要我们存在多条连线就可以了。那么我们的程序可以变为如下:

import java.io.*;

import http://www.doczj.com/doc/39cf1f51be23482fb4da4c26.html.*;

public class MyServer {

public static void main(String[] args) throws IOException {

ServerSocket server = new ServerSocket(5678);

while (true) {

Socket client = server.accept();

BufferedReader in = new BufferedReader(new InputStreamReader(client

.getInputStream()));

PrintWriter out = new PrintWriter(client.getOutputStream());

while (true) {

String str = in.readLine();

System.out.println(str);

out.println("has receive...");

out.flush();

if (str.equals("end"))

break;

}

client.close();

}

}

}

这里仅仅只是加了一个外层的While循环。这个循环的目的就是当一个客户进来就为它分配一个Socket直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"end"消息。那么现在就实现了与多客户之间的交互了。但是问题又来了,这样做虽然解决了多客户,可是是排队执

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值