首先一个最基本最基本的socket应用,一个简易的聊天。
//创建服务器 ServerSocket server = new ServerSocket(9090); //在等待客户机连接进入,进入后,生成一个Socket对象 java.net.Socket client=server.accept(); System.out.println ("Incoming "+client.getRemoteSocketAddress()); //注:server.accept()是一个阻塞方法,阻塞在这个调用上面,只有当有一个socket客户端连接上来后,这个方法才会有返回值,返回客户端的socket对象,此时才是客户端和服务器连接起来了。 //连接客户端后获取输入输出流 OutputStream ops = client.getOutputStream(); InputStream ips = client.getInputStream(); //注:向输入流中写入数据发向客户端,向输出流中写入数据发向服务端。 //发送字节数据实验 String s = "欢迎" + username + "来到聊天室\r\n"; byte[] b = s.getBytes(); ops.write(b); ops.flush(); String str = readString(ips); while (!str.equals("over")) { System.out.println("服务器收到:" + str); ChatTools.sendMsg(this.user,str); str = readString(ips); } String n = "通话结束"; ops.write(n.getBytes()); ops.flush(); //关闭与客户端的连接 client.close;
readString也是一个阻塞方法,主要在其中的ips.read(),只有在客户端输入一个字符此方法才会有一个返回值。
private String readString(InputStream ips) throws IOException { StringBuffer sb = new StringBuffer(); char c = 0; //直到回车是一个字符串 while (c != 13) { //删除 if (c == 8) { sb.deleteCharAt(sb.length() - 1); c = (char) ips.read(); } else { sb.append(c); c = (char) ips.read(); } } String str = sb.toString().trim(); return str; }
这时可在命令行中输入telnet locahost 9090连接到服务器了