TCP编程

 

 

总结:

 

服务器程序编写:


①调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;②调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。③调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。④最后关闭通信套接字。


客户端程序编写:


①调用Socket()创建一个流套接字,并连接到服务器端; ②调用Socket类的getOutputStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。 ③最后关闭通信套接字。

 

 

下面我们动手写一个使用TCP协议通信的服务器端可客户端:

 

服务器端:

package cn.com.xinli.test.socket;
import java.net.*;
import java.io.*;
public class SocketServer  extends Thread
{
	
	private  Socket socket;
	 SocketServer(Socket s)
	 {
		 this.socket=s;
	 }
	 public void run()
	 {
		 try
		 {
			  OutputStream os=socket.getOutputStream();
			  /*在这里我们使用了带缓冲的输出流,因此与需要调用flush()
			   *或者当缓冲区满了才会发送数据 
			   * 
			   * */
			  
			  BufferedOutputStream bos=new BufferedOutputStream(os);
		      InputStream is=socket.getInputStream();
		      bos.write("欢迎你,我收到消息了!".getBytes());
		      bos.flush();
		      byte[] buf=new byte[100];
		      int len=is.read(buf);
		      System.out.println(new String(buf,0,len));
		     
		      bos.close();
		      os.close();
		      is.close();
		      socket.close();
			 
		 }
		 catch(Exception e)
		 {
			 e.printStackTrace();
		 }
		  
	 }
	  public static void main(String[] args) 
	  {
		  Socket socket=new Socket();
		  SocketServer  socketServer=new SocketServer(socket);
		  socketServer.server();
		 
		  
		
	  }
	  public  static void server()
	  {
		  System.out.println("服务器启动!");
		  try {
			  
			  
			  ServerSocket ss=new ServerSocket(6000);
			  while(true)
			  {
				  Socket socket=ss.accept();
				  new SocketServer(socket).start();
			  }
		     
		    }
		    catch (Exception ex) {
		      ex.printStackTrace();
		    }
	  }
	}

 

客户端:

package cn.com.xinli.test.socket;
import java.net.*;
import java.io.*;
public class SocketClient  
{

	  public static void main(String[] args)
	  {
		  
		   SocketClient.client();
		  
		
	  }
	 
	  public static void client()
	  {
		  System.out.println("客户端启动!");
	    try {
	      Socket s=new Socket(InetAddress.getByName(null),6000);
	      OutputStream os=s.getOutputStream();
	      InputStream is=s.getInputStream();
	      byte[] buf=new byte[100];
	      int len=is.read(buf);
	      System.out.println(new String(buf,0,len));
	      os.write("我是流氓我怕谁".getBytes());
	      os.close();;
	      is.close();
	      s.close();
	    }
	    catch (Exception ex) {
	      ex.printStackTrace();
	    }

	  }
	}

 

 

 

先运行服务器端,后运行客户端,在双方完成通信以后,服务器端并没有推出,因为服务器端使用了多线程,每次来一个客户端请求都会开一个线程来处理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值