Socket简单基础(一)

对于socket以前只是简单的进行使用,没有系统的学习,这次正好有一个好的教材文档,从最开始复习,加深一下对socket的理解。
首先一个最基本最基本的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连接到服务器了


 

猜你喜欢

转载自2548540761.iteye.com/blog/2279917