Tcp通信协议是基于OSI标准协议,有应用层、传输层、网络层、物理层+数据链路层。TCP采用三次握手, 所谓“三次握手”就是A向B发出连接请求,B向A发出收到消息,然后A向B发出收到消息。这样可以提高通信连接的可靠性。TCP通信可以用Socket套接字实现,Socket正如它的英文名称“插座”一样,两台电脑要想实现通信,每台电脑就是一个插座,用一根虚拟的导线将两个插座连接一起,就可以实现通信。
下面看程序:
先看服务器端:
 
None.gif package  com.dr.me; 
None.gif
None.gif
import  java.io.BufferedReader;
None.gif
import  java.io.IOException;
None.gif
import  java.io.InputStreamReader;
None.gif
import  java.io.PrintStream;
None.gif
import  java.net.ServerSocket;
None.gif
import  java.net.Socket; 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public   class  MyServer  dot.gif {
InBlock.gif    
public static void main(String args[]) throws IOException
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//创建一个ServerSocket对象实例
InBlock.gif
        ServerSocket  ss=new ServerSocket(1526);
InBlock.gif        
//创建一个Socket实例对象,用来接受客户端传过来的Socket
InBlock.gif
        Socket client=null;
InBlock.gif        System.out.println(
"等待客户端的连接、、、、、");
InBlock.gif        
//程序运行到此就会阻塞,除非有客户端连接
InBlock.gif
        client=ss.accept();
InBlock.gif        System.out.println(
"有客户连接上了---");
InBlock.gif        
//创建和客户端的通信通道
InBlock.gif
        BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
InBlock.gif        PrintStream out
=new PrintStream(client.getOutputStream());
InBlock.gif        
//向客户端输出信息
InBlock.gif
        out.println("Hello how are you?");
InBlock.gif        
//关闭输入输出流
InBlock.gif
        in.close();
InBlock.gif        out.close();
ExpandedSubBlockEnd.gif    }
 
InBlock.gif
ExpandedBlockEnd.gif}
 
None.gif
None.gif
在此程序中首先创建了一个ServerSocket对象,并指明了它的端口,客户端通过IP和这个端口和服务器端进行连接。程序运行到此:
client=ss.accept();就不在往下运行直到有客户端连接上,在继续往下执行。通过   BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintStream out=new PrintStream(client.getOutputStream());
这条语句就和客户端建立了一根虚拟的通道。
看客户端程序:
 
None.gif package  com.dr.me; 
None.gif
None.gif
import  java.io.BufferedReader;
None.gif
import  java.io.IOException;
None.gif
import  java.io.InputStreamReader;
None.gif
import  java.net.Socket;
None.gif
import  java.net.UnknownHostException; 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public   class  MyClient  dot.gif {
InBlock.gif    
public static void main(String args[]) throws UnknownHostException, IOException
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//创建Socket实例对象
InBlock.gif
        Socket client=new Socket("LocalHost",1526);
InBlock.gif        
//创建String对象用来盛放从服务器端传过来的信息,起一个缓冲作用
InBlock.gif
        String str=null;
InBlock.gif        
//和服务器端建立通信连接
InBlock.gif
        BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
InBlock.gif        
//读取服务器端发过来的信息放在String对象中
InBlock.gif
        str=in.readLine();
InBlock.gif        
//把信息输出到控制台上
InBlock.gif
        System.out.println(str);
ExpandedSubBlockEnd.gif    }
 
InBlock.gif
ExpandedBlockEnd.gif}
 
None.gif
None.gif
客户端程序:通过
Socket client=new Socket("LocalHost",1526);
新建一个Socket对象,并指明了要向哪台电脑建立连接及该电脑的端口,“LocalHost”是本台电脑的IP,也可以写成“127.0.0.1”,如果和其他电脑连接则改为那台电脑的IP。端口号一定要和服务器端的客户端一致,否则出现异常。
运行时首先启动服务器端程序,然后再启动客户端程序。
运行结果:
服务器端控制台显示:
启动服务器端显示:
1
客户端连接后显示:
3
客户端控制台显示:
2
这个程序只是简单说明了一下TCP协议,还有很多东西没有写出来,有不对的地方希望大家批评指正,没时间了我还要上课,先写到这吧。