对于socket以前只是简单的进行使用,没有系统的学习,这次正好有一个好的教材文档,从最开始复习,加深一下对socket的理解。
首先一个最基本最基本的socket应用,一个简易的聊天。
readString也是一个阻塞方法,主要在其中的ips.read(),只有在客户端输入一个字符此方法才会有一个返回值。
这时可在命令行中输入telnet locahost 9090连接到服务器了
首先一个最基本最基本的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连接到服务器了