• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: Java
  • 标签: java  socket  多线程  IO流  

资源简介

在主线程中通过控制台读取键盘输入时,会产生阻塞。故另外开启一个线程,用于接受客户端的socket消息。服务器在收到一个socket连接之后,把该socket保存到队列中,并对队列中的每个socket开启各自的读写线程。测试可以在不同控制台运行server和client,服务器接收消息时,会显示消息来源

资源截图

代码片段和文件信息

import java.net.ServerSocket;
import java.net.Socket;
import java.io.DataInputStream;   
import java.io.DataOutputStream;   
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class socketClient
{
private DataOutputStream output;
private DataInputStream input;
private String clientName;

public static void main(String[] args)
{
//在main函数中,启动服务器的socket
new socketClient().ConnectServer();
}

public void ConnectServer()
{
try
{
Socket socket = new Socket(“127.0.0.1“10001);
clientName = socket.getInetAddress().toString();
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());

new readServer().start();
new writeServer().start();
}
catch(Exception e) {System.out.println(e.toString());}
}

public class readServer extends Thread
{
private Socket client;

public void run()
{
String msg;
try
{
while(true)
{
msg = input.readUTF();
if(msg!=null)
System.out.println(“收到消息:【“+clientName+“】 “+msg);
}
}
catch(Exception e) {System.out.println(e.toString());}
}
}

public class writeServer extends Thread
{
private Socket client;


public void run()
{
try
{
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while(true)
{
if(stdIn.ready())
{
userInput = stdIn.readLine();
if(userInput!=“exit“)
{
output.writeUTF(userInput);
System.out.println(“已发送消息给【“+clientName+“】“+userInput);
}
}
}
}
catch(Exception e) {System.out.println(e.toString());}
}
}

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1778  2012-07-11 16:00  socket通过两个线程读写,可同时收听多个终端\socketClient.java

     文件       2542  2012-07-11 16:24  socket通过两个线程读写,可同时收听多个终端\socketServer.java

     目录          0  2012-07-11 16:27  socket通过两个线程读写,可同时收听多个终端

----------- ---------  ---------- -----  ----

                 4320                    3


评论

共有 条评论