首页 > 技术文章 > 网络编程之TCP

luojack 2019-05-10 20:56 原文

 

TCP编程中,如果要完成通信,通信双方必须要创建socket,通过socket完成通信。

 

TCP通信步骤

1、服务器启动ServerSocket作为通信的Server端,等待客户端链入。

2、 客户端创建Socket作为通信的Client端

3、Client端链入Server端后建立可靠的双向的持续性的点对点的通讯连接,即可通信。

 

  TCP服务器和客户端的基本创建如下:

  服务器:

public static void main(String[] args) {
		System.out.println("服务器启动。。。");
		
		try {
			//1.创建服务器
			ServerSocket serverSocket=new ServerSocket(9000);
			//2.连接客户端
			Socket accept = serverSocket.accept();
			System.out.println(accept.getInetAddress().getHostAddress()+"连入!");	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

  客户端:

public static void main(String[] args) {
		System.out.println("客户端运行。。。");
		
		try {
			//1.创建客户端
			Socket socket=new Socket("192.168.2.241",9000);
			
			
			
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

  

    

    客户端向服务器发送一条信息如下:

  服务器:

 

public static void main(String[] args) {
		System.out.println("服务器启动。。。");
		
		try {
			//1.创建服务器
			ServerSocket serverSocket=new ServerSocket(9000);
			//2.连接客户端
			Socket accept = serverSocket.accept();
			System.out.println(accept.getInetAddress().getHostAddress()+"连入!");	
			
			//3.读取客户端发来的信息
			InputStream inputStream = accept.getInputStream();
			int len;
			byte[] buf=new byte[1024];			
			 len = inputStream.read(buf);
			String string=new String(buf, 0, len, "UTF-8");
			System.out.println("客户端向服务器发来的信息:"+string);
		
		
			//关闭通道
			inputStream.close();
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

 

  

   客户端: 

  

public static void main(String[] args) {
		System.out.println("客户端运行。。。");
		
		try {
			//1.创建客户端
			Socket socket=new Socket("192.168.2.241",9000);
			
			//2.向服务器发送数据
			OutputStream outputStream=socket.getOutputStream();
			String string="Ig niubi";
			byte[] buf=string.getBytes("UTF-8");
			outputStream.write(buf);
			socket.shutdownOutput();
			System.out.println("信息发送完成!");
			
										
			outputStream.close();
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	
		

	}

 

  常见问题:

  1、端口被占用

  

 

  2、服务器未启动

  

  3、连接超时异常,SocketTimeoutException

      当网速很慢时,可能发生连接超时异常。

  

  4.输出流没有close()或者没有flush()

  

 

推荐阅读