java中用socket实现客户端与服务端双向连接问题 10

我现在要写一个服务器和客户端在不同的主机上,这个很容易,就是客户端说一句,服务端才能说一句,服务端说一句,客户端才能说一句,该怎么办呢?用TCP,udp都可以,我的QQ是... 我现在要写一个服务器和客户端在不同的主机上,这个很容易,就是客户端说一句,服务端才能说一句,服务端说一句,客户端才能说一句,该怎么办呢?用TCP,udp都可以,我的QQ是466236549,最好有代码啊!没有财富值了。
我想客户端说几句都可以,服务器说几句也可以,什么时候说都可以,不用相互等,这样相互通信,类似QQ那种,但不用太复杂,
展开
 我来答
小童鞋_成er
2014-09-06 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
//服务端程序:
import java.io.*;
import java.net.*;

public class TCPServer {
public static void main(String[] args) throws IOException {
new TCPServer().init();
}
@SuppressWarnings("static-access")
private void init() throws IOException{
@SuppressWarnings("resource")
ServerSocket server = new ServerSocket(1000);
Socket client = null;
while(true){
try {
client = server.accept();
BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
byte[] b = new byte[1024];
int len = 0;
String message = "";
while((len=bis.read(b))!=-1){
message = new String(b,0,len);
System.out.print("客户端:"+client.getInetAddress().getLocalHost().getHostAddress()+"发来消息:" + message);
if("byte".equals(message.trim()))
client.close();
PrintWriter pw = new PrintWriter(client.getOutputStream(),true);
pw.println(message);
}
} catch (Exception e) {
System.err.println("客户端:"+client.getInetAddress().getLocalHost().getHostAddress()+" 已断开连接!");
}
}
}
}
//客户端程序:
import java.io.*;
import java.net.Socket;

public class TCPClient implements Runnable{
public static void main(String[] args) throws IOException {
new TCPClient().init();
}
private void init() throws IOException{
@SuppressWarnings("resource")
final Socket client = new Socket("127.0.0.1",1000);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String send = "";
while(true){
send = in.readLine();
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
if(!"byte".equals(send.trim()))
out.println(send);
else{
out.println(send);
System.exit(0);
}
new Thread(new TCPClient(){
@SuppressWarnings("static-access")
public void run(){
try {
BufferedInputStream bis = new BufferedInputStream(client.getInputStream());
byte[] b = new byte[1024];
int len = 0;
while((len=bis.read(b))!=-1){
System.out.println("服务器:" +client.getInetAddress().getLocalHost().getHostAddress()+"发来消息:"+new String(b,0,len).trim());
}
} catch (IOException e) {
System.err.println("连接服务器失败!");
}
}
}).start();
}
}
public void run() {}
}

//服务器测试结果:

客户端:192.168.0.200发来消息:001 byte

客户端:192.168.0.200发来消息:byte

客户端:192.168.0.200 已断开连接!

客户端:192.168.0.200发来消息:adasd

客户端:192.168.0.200 已断开连接!

//客户端测试结果:

---001号客户端--

001 byte

服务器:192.168.0.200发来消息:001 byte

byte //001礼貌说跟服务器说byte

---002号客户端--

adasd //002客户端直接关闭程序

服务器:192.168.0.200发来消息:adasd

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式