近日一个项目需要所其它项目进行集成,需要用Socket进行通讯,于是简单的学习了Socket编程方面的知识,做了个小应用示例,在此记录下,以增加印象,应用是比较简单,但从了解Socket到顺序跑通这个应用,还是花了点时间的,至少搞明白了如下几个问题:
1、从远程端(Server里面的Client、Client里面的Server)Socket的输入流(InputStream)中读取数据(一般用BufferedReader),从输入流(OutputStream)中写入数据(一般用PringWriter)
2、在使用BufferedReader的readLine()方法时,会造成当前线程的阻塞,直到能从InputStream读取到数据才继续往下走,所以如果在持续的从InputStream中读取(类似如下代码
while((line = reader.readLine()) != null){
//...
}
)时,一定要在最后发送一个结束标识,以告知对话结束。
3、
完整的代码如下:
SocketServer:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author xchao
*
*/
public class SocketServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(10086);
while(true){
Socket client = server.accept();
System.out.println("a client(" + client.getInetAddress().getHostAddress() + ") is coming.");
SocketHandlerThread clientThread = new SocketHandlerThread(client);
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class SocketHandlerThread extends Thread{
private Socket client = null;
public SocketHandlerThread(Socket client){
this.client = client;
}
public void run(){
try {
try{
InputStream inStream = client.getInputStream();
OutputStream outStream = client.getOutputStream();
PrintWriter out = new PrintWriter(outStream, true);
out.println("Hello! Please enter BYE to exit.");
BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
String line = null;
boolean eof = false;
while(!eof && (line = in.readLine()) != null){
System.out.println("Client msg:" + line);
out.println(line + "(reply from server)");
if(line.trim().equals("BYE")){
out.println("BYEBYE");
eof = true;
}
}
out.close();
in.close();
}finally{
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
SocketClient:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
/**
* @author xcaho
*
*/
public class SocketClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Socket server = new Socket(InetAddress.getLocalHost(), 10086);
try{
OutputStream outStream = server.getOutputStream();
PrintWriter out = new PrintWriter(outStream, true);
BufferedReader readerSysIn = new BufferedReader(new InputStreamReader(System.in));
String readLine = null;
while(!((readLine = readerSysIn.readLine()).equals("BYE"))){
out.println(readLine);
}
out.println("BYE");
String line = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(server.getInputStream()));
boolean eof = false;
while(!eof && (line = reader.readLine()) != null){
System.out.println(line);
if(line.trim().equals("BYEBYE")){
eof = true;
}
}
out.close();
reader.close();
}finally{
server.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
vfp socket 应用示例
C#应用socket进行网络通信的示例。
Android应用与framework的socket通信示例
socket应用示例
delphi socket api 调用示例,包括: 1 基本tcp server/client, 2 udp 发送接收 3 阻塞模式/非阻塞模式 4 select 模式 5 wsaasynselect 模式
当一个应用加入一个组播组后,就会向这个子网的所有路由器发送一个IGMP加入命令,告诉他子网内有人对发送到某一个组播组的数据感兴趣.路由器也会定时向子网内的所有终端发送一条查询消息,用于询问是否还有人对...
socket的基本应用,针对初学者,老鸟们可以掠过。本示例采用Delphi2010编写
一个使用HTML、CSS、JavaScript和Socket.IO库实现的简单聊天室应用程序的示例代码。聊天室应用程序使用Socket.IO库来建立WebSockets连接,并通过该连接发送和接收消息。当用户点击“发送”按钮或按下Enter键时,该...
包含Socket的服务器部分和客户端部分的完整应用实例,很强大 !
Android应用与framework的socket通信实例
矿用产量数据采集应用实例,使用HPsocket框架结构,通过UDP协议接收从服务器上传的数据并进行解码
socket应用例子 通道建立 传输 示例
angular-socket-io-chat, 在 ExpressJS & socket.io 之上,一个示例 Angular 聊天应用程序 angular-socket-io-chat使用 Angular 和 socket.io ( 。NodeJS,ExpressJS和 MongoDB ) 制作的聊天应用程序示例。高光...
c++Socket WSAAsyncSelect模型的简单示例。Windows会把网络事件以消息的形势通知应用程序,所以服务端必须先新建一个对话框,然后添加自定义消息。
socket 客户端 服务器 程序示例 可直接应用到工程; 下载后解压,有client.c server.c . LINUX 下直接编译。
这里个解决方案里有几个工程,分别介绍了socket中tcp、udp的简单应用,可以方便查找代码
本示例的服务器端用WPF编写,客户端为Store App,主要是结合使用序列化/反序列化,以及socket通信技巧,使得数据的收发可以变得更容易维护。本示例仅仅演示一种思路,可以将该思路应用各种类型的应用开发中。
socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户...
在这个项目中,研究人员为TCP/IP网络通信开发了一个API(应用程序接口)。这个API称为Socket接口(套接字)。今天,SOCKET接口是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的API。