当前位置 : 主页 > 编程语言 > c++ >

Tcp聊天室;往指定端口发送数据;

来源:互联网 收集:自由互联 发布时间:2021-07-03
Tcp聊天室.txt //tcptry {//获取Tcp socket对象 socket1 = new Socket("127.0.0.1", 554); //获取socket输出流 OutputStream outputStream = socket1.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(outputStream,"UTF-8")
Tcp聊天室.txt
//tcp
try {
				//获取Tcp socket对象
				 socket1 = new Socket("127.0.0.1", 554);
				 
				 //获取socket输出流
				 OutputStream outputStream = socket1.getOutputStream();
				 OutputStreamWriter osw = new OutputStreamWriter(outputStream,"UTF-8");
				 PrintWriter pw = new PrintWriter(osw,true);
				
				 
				 //读取TS文件数据
				// in = new FileInputStream(new File("D:/java/2017022012033239.ts"));
				 in = new FileInputStream(new File("D:/mpg4/2017022012033239.ts"));
				 byte[] buf = new byte[188];
				 int len;
				 pw.println("RTSP/1.0 200 OK\r\n"
				 		+ "CSeq:6\r\n"
				 		+ "Server:Red5/7.0.4 (Build/16.0108; Platform/Win32; Release/Red5; State/Development;)\r\n\r\n");
			     while((len=in.read(buf))!=-1)
			     {
			    	 String a = String.valueOf(buf);
			    	 //输出
			    	 pw.println(a);
			    	 
			     }
				 
			} catch (Exception e) {
				// TODO Auto-generated catch block
				System.out.println(e);
			}finally{
				try {
					
					//关闭流
					socket.close();
					in.close();
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}





-----------------------服务端

package chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 聊天室服务端
 * @author Administrator
 *
 */
public class test3 {
	/*
	 * java.net.ServerSocket
	 * 运行在服务端的ServerSocket有两个作用
	 * 1:申请服务端口(客户端通过该端口与服务端建立连接)
	 * 2:监听服务端口,等待客户端连接.一旦客户端连接则
	 *   创建一个Socket实例用于与该客户端交互.
	 */
	private ServerSocket server;
	
	public test3() throws Exception{
		try {
			/*
			 * 实例化ServerSocket需要指定
			 * 服务端口.该端口不能与当前操作系统
			 * 其他程序申请的端口冲突,否则会抛出
			 * 端口被占用异常
			 */
			server = new ServerSocket(6666);
		} catch (Exception e) {
			throw e;
		}
	}
	
	public void start(){
		try {
			/*
			 * ServerSocket提供了方法:
			 * Socket accept()
			 * 该方法是一个阻塞方法,作用是监听
			 * ServerSocket开启的服务端口,
			 * 直到一个客户端通过该端口连接,该方法
			 * 才会解除阻塞,并返回一个Socket实例
			 * 通过该Socket实例与刚刚建立连接的
			 * 客户端进行通讯.
			 */
			while(true){
				System.out.println("等待客户端连接...");
				Socket socket = server.accept();
				System.out.println("一个客户端连接了!");
				/*
				 * 当一个客户端连接后,启动一个线程来处理
				 * 与该客户端的交互工作.
				 */
				ClientHandler handler
					= new ClientHandler(socket);
				Thread t = new Thread(handler);
				t.start();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			test3 server = new test3();
			server.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 该线程负责与指定的客户端进行交互
	 * @author Administrator
	 *
	 */
	class ClientHandler implements Runnable{
		/*
		 * 当前线程负责与指定客户端交互的Socket
		 */
		private Socket socket;
		//客户端的地址信息
		private String host;
		
		public ClientHandler(Socket socket){
			this.socket = socket;
			/*
			 * 通过socket获取远程计算机地址信息
			 * 对于服务端而言,远程计算机就是客户端
			 */
			InetAddress address
				= socket.getInetAddress();
			//获取远端计算机IP
			host = address.getHostAddress();
		}
		
		public void run(){
			try {
				System.out.println(host+"上线了!");
				
				
				InputStream in 
					= socket.getInputStream();
			
				InputStreamReader isr
					= new InputStreamReader(
							in,"UTF-8"	
				);
				BufferedReader br
					= new BufferedReader(isr);
				String message = null;
				/*
				 * br.readLine读取客户端发送过来的一行字符串
				 * 时,客户端断开连接时,由于客户端所在系统不同,
				 * 这里readLine方法的执行结果也不相同:
				 * 当windows的客户端断开连接时,readLine方法
				 * 会直接抛出异常
				 * 当linux的客户端断开连接时,readLine方法会
				 * 返回null.
				 * 
				 */
				while((message =  br.readLine())!=null){
					System.out.println(host+"说:"+message);
				}
				
				
			} catch (Exception e) {
				
			} finally{
				//客户端与服务端断开连接.
				System.out.println(host+"下线了!");
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}



---------------------------客户端


package chat;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 * 聊天室客户端
 * @author Administrator
 *
 */
public class test4 {
	/*
	 * 
	 * /sbin/ifconfig
	 * 
	 * java.net.Socket  套接字
	 * 封装了TCP通讯.使用该类完成与服务端的连接
	 * 并进行相应的通讯.
	 * 
	 */
	private Socket socket;
	/**
	 * 构造方法用来初始化客户端
	 */
	public test4()throws Exception{
		try {
			/*
			 * 实例化Socket时需要传入两个参数
			 * 1:服务端的地址
			 * 2:服务端的端口
			 * 
			 * 通过地址找到服务端的计算机,端口
			 * 则找到该计算机上的服务端应用程序.
			 * 
			 * 实例化Socket的过程就是连接服务端
			 * 的过程.连接不成功该构造方法会抛出
			 * 异常.
			 */
			System.out.println("正在连接服务端...");
			socket = new Socket(
				"localhost",
				6666
			);		
			System.out.println("与服务端建立连接!");
		} catch (Exception e) {
			throw e;
		}
	}
	/**
	 * 客户端的启动方法
	 */
	public void start(){
		try {
			Scanner scanner = new Scanner(System.in);
			/*
			 * Socket提供了方法:
			 * OutputStream getOutputStream()
			 * 该方法可以获取一个字节输出流,通过
			 * 该输出流写出的数据会发送至远端计算机
			 * 对于客户端这边而言远端是服务端.
			 */
			OutputStream out
				= socket.getOutputStream();
			
			OutputStreamWriter osw
				= new OutputStreamWriter(
					out,"UTF-8");
			
			PrintWriter pw
				= new PrintWriter(osw,true);
			
			String message = null;
			while(true){
				message = scanner.nextLine();
				pw.println(message);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			test4 client = new test4();
			client.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}
网友评论