新手入门,照着课本敲的,自己加的注释,若有错误,敬请指出。
接着会自己试着写多线程的、异地交流的一些东东。
运行情况:
SERVER:
服务器启动
New connection accepted/127.0.0.1:2924
1
2
3
4
5
dxgjdfjg
bye]
bye
CLIENT:
How are you ! I am amy . you can talk with me .
1
Amy:YES!
2
Amy:I love you!
3
Amy:I love xiaopan!
4
Amy:Sorry I can‘t understand you!
5
Amy:Sorry I can‘t understand you!
dxgjdfjg
Amy:Sorry I can‘t understand you!
bye]
Amy:Sorry I can‘t understand you!
bye
Amy:See You!
package socketserver;
/**
* EchoServer Server program
* can do easy talk with Client
* @author Amy
* make in 2014/2
* @Version 1.0
*/
import java.io.*;
import java.net.*;
public class EchoServer { //服务端程序
private int port = 8000; //链接端口
private ServerSocket serverSocket;
public EchoServer() throws IOException {//开启服务端程序
serverSocket = new ServerSocket(port);//指定通信端口并开启服务
System.out.println("服务器启动");
}
public String echo(String msg) {//给恢复信息加前缀
return "Amy:" + msg;
}
private PrintWriter getWriter(Socket socket) throws IOException {//给客户机回复交流语句
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {//用于读取客户机交流语句
InputStream scoketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(scoketIn));
}
public void server() {//服务程序
Socket socket = null;//清空客户机连接
try {
socket = serverSocket.accept();// 等待客户机连接
System.out.println("New connection accepted"
+ socket.getInetAddress() + ":" + socket.getPort());//客户机连接成功,给出新连接客户机IP地址及连接端口号
BufferedReader br = getReader(socket);//读取客户机交流语句
PrintWriter pw = getWriter(socket);
pw.println("How are you ! I am amy . you can talk with me .");//交流问候语
String msg = null;//清空对话缓存内容
while ((msg = br.readLine()) != null) {//读取客户机交流语句 若不为空
System.out.println(msg);//输出到服务端控制台
if (msg.equals("bye"))// 如果客户发送信息为“bye”,结束通信
{
pw.println(echo("See You!"));//给客户机恢复对应语句//要结束服务了:下次再见
break;//结束服务 断开连接
}
else if(msg.equals("1"))//与客户机交流
{
pw.println(echo("YES!"));
}
else if(msg.equals("2"))
{
pw.println(echo("I love you!"));
}
else if(msg.equals("3"))
{
pw.println(echo("I love xiaopan!"));
}
else
{
pw.println(echo("Sorry I can‘t understand you!"));
}
}
} catch (IOException e) {//异常
e.printStackTrace();
} finally {
try {
if (socket != null)//客户机关闭客户端
socket.close();// 断开连接
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {//main
new EchoServer().server();
}
}
/**
* EchoClient Client program
* can talk with Server
* @author Amy
* make in 2014/2
* @Version 1.0
*/
import java.io.*;
import java.net.*;
import java.util.*;
public class EchoClient {//客户端
private String host = "localhost";//与本地服务端器通信
private int port = 8000;//指定通信端口
private Socket socket;
public EchoClient() throws IOException {//与服务端建立连接,收到“问候语”表示连接成功
socket = new Socket(host, port);//与指定的服务器的指定端口连接
}
private PrintWriter getWriter(Socket socket) throws IOException {//给服务端发送回话语句
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {//接收服务端的会话语句
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void talk()throws IOException{ //与服务端回话程序
try{
BufferedReader br=getReader(socket);//接收服务端的会话语句
PrintWriter pw=getWriter(socket);//给服务端发送回话语句
BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));//本地控制台输入
String msg=null;//清空语句缓存
System.out.println(br.readLine());//输出服务端会话语句到服务台,连接成功的“问候语句”
while((msg=localReader.readLine())!=null){//读取到本地客户端控制台语句,不为空
pw.println(msg);//给服务端发送本地客户端控制台输入的会话语句
System.out.println(br.readLine());//将接收到的服务端发来的会话语句输出到本地客户端控制台
if(msg.equals("bye"))break;
}
}
catch(IOException e){
e.printStackTrace();
}
finally
{
try{
socket.close();//断开连接
}
catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException{//main
new EchoClient().talk();
}
}
原文:http://blog.csdn.net/huahua520amy/article/details/20057231