Java Socket 编程实例学习

1、上代码

1.1 客户端程序Myclient

package com.yuan.testcs;

import java.awt.datatransfer.StringSelection;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Myclient {
public static void main(String args[]){
	
	try{
		Socket socket=new Socket("127.0.0.1",5678); //请求链接server 端
		//经过链接获取server上面的输入输出流
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		//建立标准输入流,从键盘接收数据
		BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
		//从键盘输入读取一行,发送到server端,当用户输入byte时候结束链接
		String s;
		do{
			s=sin.readLine();
			out.println(s);
			out.flush();
			if(!s.equals("bye")){
			System.out.println("@server response:"+in.readLine());	
				
			}else {
				System.out.println("The connection is closed");
			}
			
		}while(!s.equals("bye"));
		out.close();
		in.close();
		socket.close();
		
	}catch (Exception e) {
		System.out.println("Error:"+e);
	}
	
	
}
}

1.2 Server端程序,MyServer

package com.yuan.testcs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
	public static void main(String[] args) {
	try {
		//创建server socket 而且等待链接
		ServerSocket server=new ServerSocket(5678);
		Socket socket=server.accept();
		//链接创建 经过Socket获取链接的输入和输出流
		BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintWriter out=new PrintWriter(socket.getOutputStream());
		//建立标准输入流,从键盘输入数据
		BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
		//先读取client 发送的数据,而后从标准输入读取数据发送给client
		//当收到 bye 字符关闭链接
		String s;
		while(!(s=in.readLine()).equals("bye")){
			System.out.println("#Received from client:"+s);
			out.println(sin.readLine());
			out.flush();
		}
		System.out.println("The connection is closing");
		out.close();
		in.close();
		socket.close();
		server.close();
	} catch (Exception e) {
		// TODO: handle exception
		System.out.println("Error:"+e);
	}

	}

}

1.3 问题解决

1.3.1 Javac 命令不是本地命令。

由于是在本地测试的,因此须要开启两个Dos 客户端。另外程序是用Eclipse写的,因此考虑直接用Java 的命令来执行。java

可是在用Javac 编译的时候提示,不是本地命令,可是Java 命令能够运行,因此考虑是参数配置的问题。最后发现是JAVA_HOME 里面的jdk 路径写的不对致使,以前安装了jre,最后安装了jdk 。socket

1.3.2 Java 运行程序的时候总是提示找不到 class

但是事实上class文件已经有了。因而查看了博文:http://blog.csdn.net/harryweasley/article/details/45559129/测试

说是由于个人Java文件放在包里面,因此找不到类。正确的方法是:先用Javac -d .  MyServer.java 这样编译下来就带有包的结构了。而后再用Java 包名称.MyServer 来运行,MyClient也是同样的操做。spa

1.4 查看运行结果 

相关文章
相关标签/搜索