学习Java(84)_基于TCP的socket编程_服务器程序编写

服务器程序编写:
1、调用 ServerSocket( int port ) 创建一个服务器端套接字,并绑定到指定的端口上。
2、调用 accept(),监听链接请求,如果客户端请求链接,则接受链接,并返回和客户端匹配的套接字。
3、调用 Socket 类的 getOutputStream() 和 getInputStream 获取输出流和输入流,开始网络数据的发送和接受。
3、最后关闭通信套接字。
import java.io.*;
import java.net.*;
class TCPServer
{
	public static void main( String[] args ) throws Exception
	{
		//创建一个服务器套接字
		ServerSocket ss = new ServerSocket( 6789 ); //指定端口号,表示该程序在监听6789端口
		/*
			new ServerSocket 创建出来的对象ss,并不会自动去监听6789端口。
			需要去监听6789端口,需要调用其方法ss.accept();
			这样才会去监听客户端是否有请求发送到6789端口。
		*/
		
		while( true )
		{
			Socket s = ss.accept(); //监听客户端是否有请求进来
			/*
				accept();功能:等待客户端的连接,没有连接,则继续监听,程序停滞不前。
				如果有请求进来,则自动将该连接封装成一个Socket对象,程序不再阻塞,继续执行。
				本引用s,和客户端的s,实质上是一个s,服务端s.getInputStream() 和
					客户端 s.getOutputStream() 其实是建立在一个流上,是这个流的两端。
				accept()是阻塞式方法,如果接收不到客户端的连接,则程序将停止不前
			*/
			
			//程序走到这一行,说明确实有请求进来
			//Socket 已经与客户端 Socket 建立了通道,获得一个输入流
			InputStream is = s.getInputStream();//Socket对象可以获得InputStream和OutputStream两个流
			DataInputStream dis = new DataInputStream( is );
			System.out.println( dis.readUTF() );
			//readUTF()方法也是阻塞式方法,收不到客户端数据,程序停滞不前
			dis.close();
			s.close();	
		}
	}
}


小艾的博客 http://www.aixinyan.me/