客户端:MultiTalkClient.java
------------------------------------------------------------------------------
import java.io.*;
import java.net.*;public class MultiTalkClient {
public static void main(String args[]) {
try {
System.out.println("客户方正准备提交请求......");
Socket socket = new Socket("127.0.0.1", 2006);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.
getInputStream())); String strLine;
strLine = sin.readLine();
while (!strLine.equals("bye")) {
os.println(strLine);
os.flush();
System.out.println("客户方说:" + strLine);
System.out.println("服务方回答:" + is.readLine());
strLine = sin.readLine();
}
os.close();
is.close();
socket.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}
------------------------------------------------------------------------------
服务端MultiTalkServer.java
import java.io.*;
import java.net.*;class ServerThread extends Thread {
Socket socket = null;
int num; public ServerThread(Socket socket, int num) {
this.socket = socket;
this.num = num + 1;
} public void run() {
try {
String strLine;
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream()); while (! ( (strLine = sin.readLine()).equals("bye"))) {
os.println(strLine);
os.flush();
System.out.println("客户方" + num + "说:" + is.readLine());
System.out.println("服务方回答客户方:" + num + "说:" + strLine);
}
is.close();
os.close();
socket.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}public class MultiTalkServer {
static int intNum = 0;
public static void main(String args[]) {
ServerSocket server = null;
boolean b = true;
try {
System.out.println("服务方正在服务......");
server = new ServerSocket(2006);
while (b) {
Socket socket = server.accept();
new ServerThread(socket, intNum).start();
intNum++;
}
server.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}
------------------------------------------------------------------------------
请教,当服务端程序S运行并监听端口后,首先启动客户端程序A进行输入,然后再在S中输入应答的数据,分别能够在S和A中看到相应的通信数据。但是如果现在再启动客户端程序B进行输入,然后再在S中输入应答的数据,这时就会出现需要输入两行数据才能进行通信的问题,并且我想发往B的数据有时被发往了A,造成了混乱,请指教,谢谢!
------------------------------------------------------------------------------
import java.io.*;
import java.net.*;public class MultiTalkClient {
public static void main(String args[]) {
try {
System.out.println("客户方正准备提交请求......");
Socket socket = new Socket("127.0.0.1", 2006);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in)); PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.
getInputStream())); String strLine;
strLine = sin.readLine();
while (!strLine.equals("bye")) {
os.println(strLine);
os.flush();
System.out.println("客户方说:" + strLine);
System.out.println("服务方回答:" + is.readLine());
strLine = sin.readLine();
}
os.close();
is.close();
socket.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}
------------------------------------------------------------------------------
服务端MultiTalkServer.java
import java.io.*;
import java.net.*;class ServerThread extends Thread {
Socket socket = null;
int num; public ServerThread(Socket socket, int num) {
this.socket = socket;
this.num = num + 1;
} public void run() {
try {
String strLine;
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os = new PrintWriter(socket.getOutputStream()); while (! ( (strLine = sin.readLine()).equals("bye"))) {
os.println(strLine);
os.flush();
System.out.println("客户方" + num + "说:" + is.readLine());
System.out.println("服务方回答客户方:" + num + "说:" + strLine);
}
is.close();
os.close();
socket.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}public class MultiTalkServer {
static int intNum = 0;
public static void main(String args[]) {
ServerSocket server = null;
boolean b = true;
try {
System.out.println("服务方正在服务......");
server = new ServerSocket(2006);
while (b) {
Socket socket = server.accept();
new ServerThread(socket, intNum).start();
intNum++;
}
server.close();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
}
------------------------------------------------------------------------------
请教,当服务端程序S运行并监听端口后,首先启动客户端程序A进行输入,然后再在S中输入应答的数据,分别能够在S和A中看到相应的通信数据。但是如果现在再启动客户端程序B进行输入,然后再在S中输入应答的数据,这时就会出现需要输入两行数据才能进行通信的问题,并且我想发往B的数据有时被发往了A,造成了混乱,请指教,谢谢!
解决方案 »
- 请问一个包的子包能访问父包的类吗?
- this的用法.我不太明白.
- 疑问JAVA中的位操作
- 网络编程问题
- 请教几个JAVA基础问题?(我刚学不久,别见笑!!!)
- 输出byte数组问题(大侠在吗)~~
- 压缩文件出现乱码
- 谁知道JAVA语言 和C语言 能在SOCKET网络下能互相访问的啊?我的Client是JAVA写的 朋友是用C写的Server端
- new String(byte[])时,若含-97,-98等数据时,会自动变为63,如何解决???
- ie如何修复:Microsoft Internet Explorer 遇到问题需要关闭。我们对此引起的不便表示抱歉。
- 如果希望返回char* 类型数据的函数返回值都遵循同一规则(如果返回值长度为0,就返回null),用什么设计模式?
- java中有无类似c#中一样的Dispose方法用于手动释放对象?
try {
System.out.println("服务方正在服务......");
server = new ServerSocket(2006);
while (b) {
Socket socket = server.accept();
ServerThread st = new ServerThread(socket).start();
list.add(st);
}
server.close();
}
你在为每一个线程确定一个唯一的标识,来确定他的目的地,这样发就不会出错了;
另,建议你的MultiTalkServer也做成一个线程,方便性能协调.