Socket通信

来源:互联网 发布:手机淘宝个人主页标签 编辑:程序博客网 时间:2024/05/22 12:47

      说起Socket 这个东西,不同的人,有不同的说法,有不同的叫法,不管你叫它什么,它也就是一个工具,用来完成我们实际的业务的,所以可以不必要纠结这个。

在JDK 上有一堆的关于这个的介绍,╮(╯▽╰)╭ ,真心话,遇到要使用的时候,我还真不想去查它怎么使用,我只关心结果。

     来,直接上代码了(我觉得这个比较的只管)。

server 端的,里面有些bug ,也不想改动了,只是想表达个思想就是了。

package com.ibm.extend.test;


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


public class SocketServer {


private int port;

public SocketServer(int port){
this.port = port;
}

public static void main(String[] args) {
try {
System.out.println("The server is start ...");
ServerSocket server = new ServerSocket(8899);
Socket socket = server.accept();
InputStream in = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
String msg = reader.readLine();
while (true) {
System.out.println("The receive message is : " + msg);
if (msg.equals("stop")) {
break;
}
}
//close.
reader.close();
in.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}


/**
* receive messages.
* @return
*/
public boolean receiveMsg(){
try {
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
BufferedReader br =  new BufferedReader(new InputStreamReader(System.in)); 
PrintStream ps = new PrintStream(socket.getOutputStream());
String msg = br.readLine();
while (true) {
System.out.println("client input value : "+msg);
ps.println(msg);
if (msg.equals("stop")) {
break;
}
msg = br.readLine();
}
//colse.
br.close();
ps.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}


Client端的代码,也有bug ,不可直接拿来就run 。

package com.ibm.extend.test;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


public class SocketClient {


private static String host;
private static int port;
private static int index;


public SocketClient(String host, int port) {
this.host = host;
this.port = port;
}


/**
* print message
* @param writer
* @param msg
*/
public static void delayPrint(final BufferedWriter writer ,final String msg) {
Timer timer = new Timer(false);
TimerTask task = new TimerTask() {
public void run() {
try {
writer.write(msg);
index++;
System.out.println("");
} catch (IOException e) {
e.printStackTrace();
}
}
};


Date time = new Date();
long delay = 2000;
long period = 5000;


// 启动定时任务,立即执行壹次并退出
// timer.schedule(task, time);
// 启动定时任务,立即执行壹次,然后每隔两秒执行壹次
timer.schedule(task, time, delay);
// 启动定时任务,从现在起过两秒执行壹次然后退出
// timer.schedule(task, delay);
// 启动定时任务,从现在起过两秒以后,每隔五秒执行壹次
// timer.schedule(task, delay, period);
}



public static void main(String[] args) {

try {
System.out.println("The client is start ...");
Socket socket = new Socket("127.0.0.1", 8899);
String msg = "This is test message just for test . if it working ."+index;
OutputStream out = socket.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));


while (true) {
//writer.write(msg);
delayPrint(writer, msg);

System.out.println("The send message is : " + msg);
if (msg.equals("stop")) {
break;
}
}


// close.
writer.close();
out.close();
socket.close();


} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}


/**
* send messages.

* @return
*/
public boolean sendMsg() {
try {
Socket socket = new Socket(host, port);
PrintStream ps = new PrintStream(socket.getOutputStream());
BufferedReader brin = new BufferedReader(new InputStreamReader(System.in));
BufferedReader brout = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = brin.readLine();
while (true) {
ps.println(msg);
msg = brout.readLine();
System.out.println("服务器的信息:" + msg);
if (msg.equals("stop")) {
break;
}
msg = brin.readLine();
}
// close.
socket.close();
brin.close();
brout.close();


} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}


这个东西,主要是用来在网络间传递数据使用的,但是如果在传递过程中,断网了,那就歇菜了。O(∩_∩)O~ 使用的时候一定要主要这个问题的处理。

主要在于使用,在意使用的细节和注意事项。



0 0
原创粉丝点击