`
1641606815
  • 浏览: 39012 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java中Socket通信

阅读更多
一.通信中常用到的命令行命令
 
1.查看你的电脑与其他服务器的连接信息-->>netstat -an
    当你在命令行中输入netstat -an 并回车后会出现如图所示的界面:




    其中:
       
第一列  第二列   第三列  第四列
协议是 TCP 还是 UDP  本地地址由IP和端口组成  目标机器地址由IP和端口组成 连结状态

        
  2.检查目标网站是否与本机是否可以连接也就是所谓的是否可以ping的通
    当你在命令行中输入ping taobao.com(仅仅是一个例子只要ping 后面是网址或者是IP地址)
    回车后会看到
   


  3.连接某网站telnet
    如:telnet taobao.com 80  回车
    其中taobao.com为网址也可以为IP地址  80代表端口且为默认的端口
  4.查看本机与目标服务器之间经过多少服务器-->>tracert
    当你在命令行中输入tracert taobao.com并回车后命令行中就会显示
    途中经过多少个服务器并将服务器的IP地址输出
    


二.实现编译器向命令行发送信息
    代码如下:
	/**
	* 简单通信只实现了从代码中向命令行中发送一条信息
	* 
	* @author:Andrew
	*/
	public class ChatServer(){
		//主函数
		public static void main(String[] args){
			ChatServer chat = new ChatServer();
			chat.setUpServer(8000);
		}
		/**
		* 启动服务器
		* @param port:端口
		*/
		private void setUpServer(int port){
		 try{
			//建立指定端口的服务器
			ServerSocket server = new ServerSocket(port);
			Socket client = server.acceept();
			
			OutputStream out = client.getOutputStream();
			String str = "我的第一个通信项目";
			byte[] data = str.getBytes();
			out.write(data);
			out.flush();
			client.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}

   运行上面的代码然后再打开命令行
   输入:telnet localhost 8000
   回车后即可看到命令行输出:我的第一个通信项目
  
   如果打开命令行输入:telnet localhost 8000
   回车后被告知不是内部命令
   请打开"我的电脑"在搜索中搜索telnet然后将 telnet.exe
   拷贝到C:\Windows\System32 目录下即可
三.实现命令行与java编译软件间的通信仅以Eclipse为例
   代码如下:
package threadTalk;

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

/**
 * 多个命令行聊天的入口
 * @author Andrew
 *
 */
public class Main {

	/**
	 * 主程序
	 */
	public static void main(String[] args) {
		Main m = new Main();
		m.setUpServer(9090);
	}
	/**
	 * 启动一个服务器
	 * @param port  端口号
	 */
	private void setUpServer(int port){
		try {
			//建立服务器对象
			ServerSocket server = new ServerSocket(port);
			System.out.println("端口:"+port);
			
			while(true){
				Socket socket = server.accept();
				ServerThread st = new ServerThread(socket);
				st.start();
				System.out.println("启动线程!");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

package threadTalk;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 聊天线程类
 * 功能:在命令行中实现多人聊天
 * @author Andrew
 *
 */
public class ServerThread extends Thread{
	private Socket socket;
	
	public ServerThread(Socket socket){
		this.socket = socket;
	}
	
	public void run(){
		this.sendAndGetInfo();
	}
	/**
	 * 发送并接收信息
	 */
	private void sendAndGetInfo(){
		try {
			//获得输入流对象
			InputStream input = socket.getInputStream();
			String s = "你好!\n";
			this.sendInfo(s);
			
			String inputStr = this.getInfo(input);
			while(!"bye".equals(inputStr)){
				s = "你的话语:"+inputStr+"\n";
				this.sendInfo(s);
				inputStr = this.getInfo(input);
			}
			s = "欢迎再来!";
			this.sendInfo(s);
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 向命令行发送信息的方法
	 * @param str  要发送的信息
	 */
	private void sendInfo(String str){
		try {
			OutputStream out = socket.getOutputStream();
			out.write(str.getBytes());
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 从另一个命令行中读取信息
	 * @param input  基本输入流
	 * @return       读取到的信息
	 * @throws IOException 
	 */
	private String getInfo(InputStream input) throws IOException{
		//创建字符串缓冲区
		StringBuffer buffer = new StringBuffer();
		//读取的字节
		int read_Info = 0;
		while(13 != read_Info){
			read_Info = input.read();
			char char_Info = (char)read_Info;
			buffer.append(char_Info);
		}
		String str_Info = buffer.toString().trim();
		return str_Info;
	}
}

  • 大小: 75 KB
  • 大小: 40.8 KB
  • 大小: 35.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics