`
商山居士
  • 浏览: 8529 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

网络协议TCP

 
阅读更多

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,在Java中网络通信是非常重要的TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。接下来看看简单的例子

package Wangluo;



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class tread extends Thread{
    private Socket socket;
    private String name;
    
 public tread(Socket socket){
	 this.socket=socket;
	 name=socket.getLocalAddress().getHostName();
        //获取客户端主机名字
 }
	
public void run(){
	
	try{
	    //从Socket 上获得输出流对象    从服务端到客户端
			OutputStream p=socket.getOutputStream();
			//包装成字符输出流
			OutputStreamWriter out=new OutputStreamWriter(p);
			
			//包装成缓冲字符输出流
			BufferedWriter buf=new BufferedWriter(out);
			//发送消息
			buf.write("欢迎来到聊天室"+"\r\n");
			buf.flush();
			
			//获得输入流   从客户端到服务端
			InputStream inp=socket.getInputStream();
			//将输入流包装成字符流
			InputStreamReader irs=new InputStreamReader(inp);
			//包装成字符缓冲流
			BufferedReader br=new BufferedReader(irs);
			
			//读取一行字符串,必须读到\r,\n才会结束,否则一直等待
			String str=br.readLine();
			while(str!=null){
	    		System.out.println(name+"说:"+str);
	    		 
	    		//将收到的消息转发给在线的所有其他客户端
	    		//遍历socket队列
	    		for(int i=0;i<Myserver.list.size();i++){
	    			//取出客户端套接字
	    			Socket sc=Myserver.list.get(i);
	    			//转发消息
	    			if(!sc.isClosed()&&sc!=socket){
	    				//从要被转发的客户端套接字上获得数据输出流
	    				OutputStream ops=sc.getOutputStream();
	    				//打包成缓冲字符流
	    				BufferedWriter buf1=new BufferedWriter(new OutputStreamWriter(ops));
	    				//发送消息给该客户端
	    				buf1.write(name+"说"+str+"\r\n");
	    				buf1.flush();
	    				
	    			}
	    		} 
	    		str=br.readLine();
				
			} 
	}catch(Exception ef){
		ef.printStackTrace();
		}
			
}
}

 


 

服务端的代码如下

package Wangluo;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Myserver {
	static ArrayList<Socket>  list=new ArrayList<Socket>();
	public static void main(String[] args) {
	try {
     //在指定端口创建服务端套接字对象
		ServerSocket server=new ServerSocket(9090);
		System.out.println("等待连接中");
		
		while(true){
		//等待接受客户端的连接
		//必须要等到有客户端连上来,该方法才执行完毕,否则一直等待
		Socket socket=server.accept();
		System.out.println("连上一个客户端"+socket.getRemoteSocketAddress());//得到客户端地址
//		System.out.println(socket.getLocalSocketAddress());//得到服务端地址
		list.add(socket);//添加元素
		tread t=new tread(socket);
		t.start();
		}
		
		
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
   }
}

 这是一个最简单的网络通信例子,也很容易懂

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics