您的位置:首页 > 其它

服务器和客户端Socket单向通信例子

2017-02-08 16:21 423 查看
看了两天socket通信,也参考了网上其他人是怎么写的。

下面我把最简单的socket例程贴出来

server代码:

public class Server {

private static int port = 8888;
private static ServerSocket serverSocket;
private static Socket socket;

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

serverSocket = new ServerSocket(port, 2);
socket = serverSocket.accept();
System.out.println("客户端已链接");

DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF("来自服务器的消息");

while (true){
/*
//读取客户端发送的信息
String str = dis.readUTF();
System.out.println("From 客户端:"+str);

if(str.equals("bye")){
socket.close();
serverSocket.close();
break;
}
*/
// 发送键盘输入的一行
String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
dos.writeUTF(s);
}
}
}


Client代码:

public class Client {

private static int port = 8888;
private static String host = "localhost";
private static Socket socket;

public static void main(String args[]) throws UnknownHostException,
IOException {
socket = new Socket(host, port);

DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF("来自客户端的消息");

while(true){
//读取服务器发送的信息
String str = dis.readUTF();
System.out.println("From 服务器:"+str);

if(str.equals("bye")){
socket.close();
System.out.println("关闭socket");
break;
}
// 发送键盘输入的一行
//String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
//dos.writeUTF(s);
}
}
}


因为readLine()是一个阻塞函数,接收不到消息会阻塞在那里。如果把两个文件中的注释去掉后,服务器和客户端必须你一句我一句,才能正常通信。目前还没有解决办法。
所以,先实现单向通信:server发送数据,client接收数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: