近日一个项目需要所其它项目进行集成,需要用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();
}
}
}
分享到:
相关推荐
- 使用`SOCKET()`函数打开一个Socket连接,指定服务器的IP地址和端口号。 - `OPEN`命令用于建立到服务器的连接。 - `SEND`命令将数据发送到服务器。 - `RECEIVE`命令接收服务器返回的数据。 - 最后,使用`CLOSE...
要创建一个UDP Socket,首先需要指定地址族(通常为InterNetwork表示IPv4),套接字类型(UdpClient或Socket,这里我们关注Socket),以及协议类型(Udp): ```csharp Socket udpSocket = new Socket(Address...
在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个示例的详细解读: 首先,让我们了解什么是Socket。在计算机网络中,Socket是应用...
Client端的实现主要是创建一个Socket对象,连接到服务器端的套接字,并与服务器端进行通信。下面是Client端的代码实现: ```java public class tcpClient { public static void main(String[] args) throws ...
在IT行业中,网络编程是不可或缺的一...总的来说,"SOCKET简单示例"是一个很好的起点,让初学者能够深入理解网络通信的基础,为进一步学习网络编程,如HTTP、FTP等应用层协议,甚至更高级的网络编程技术打下坚实基础。
在本示例中,`apksocket`可能是一个Android应用,包含了实现上述客户端逻辑的代码。同时,`PCsocket`可能是服务器端的应用程序,负责监听和处理来自Android设备的连接请求。为了在广域网中实现通信,可能需要配置...
在"MFC socket服务器示例"中,MFCSocketServer可能是一个包含了完整示例代码的项目,它展示了如何将上述步骤整合到一个实际的MFC应用程序中。这个项目可能包含以下部分: - 主程序(如CWinApp派生类):负责初始化...
4. 连接成功后,服务器和客户端都各自拥有一个Socket实例,通过Socket的输入/输出流进行数据交换。 5. 数据传输完成后,关闭Socket和ServerSocket。 在"SocketDemo"这个示例中,我们可能会看到上述步骤的实现代码,...
总的来说,这个"Socket应用的很好示例"是一个极好的学习资源,它可以帮助我们理解Socket通信的基础知识,以及如何在实际项目中运用这些知识。通过对代码的阅读和实践,我们可以加深对网络编程的理解,提高解决问题的...
"MySocket"可能是示例项目中的一个关键文件,可能包含Android应用中的Socket客户端实现。通过阅读和分析这个文件,我们可以更深入地理解如何在实际项目中实现Android应用与framework层的Socket通信。 总的来说,...
总之,"delphi API实现socket通信示例"是一个宝贵的教育资源,它可以帮助开发者掌握网络编程的基础,并为构建基于Socket的网络应用打下坚实基础。通过实践和理解这些API的用法,你可以创建出能够跨越网络通信的高效...
【SuperSocket】是一个高度可定制、高性能的.NET Socket服务端开发框架,专为构建网络应用程序而设计。在本文中,我们将深入探讨SuperSocket的核心概念、功能特性,以及如何利用提供的客户端和服务器端示例源码进行...
首先,Socket在计算机网络中扮演着桥梁的角色,它允许两个程序(通常是一个服务器和一个客户端)通过网络进行数据交换。Socket接口提供了丰富的API,让开发者能够创建、配置和管理网络连接。在Java中,Socket类和...
- 首先,服务器需要创建一个Socket,调用`socket()`函数,指定地址族和套接字类型。 - 接着,服务器需要绑定一个本地地址,调用`bind()`函数,将Socket与特定的IP和端口号关联。 - 然后,服务器调用`listen()`...
在本示例中,我们探讨的是使用Delphi XE 10.4开发的一个基于Socket通信的简单聊天应用。这个应用的核心技术包括TServerSocket和TClientSocket组件,SQLite3数据库,以及自定义类和数组的运用。让我们逐一深入解析...
综上所述,"Java Socket示例"是一个展示如何在Java中使用Socket进行网络通信的基础应用,它涉及到了网络编程、多线程和GUI设计等多个方面,是学习Java网络编程的绝佳起点。通过理解和实践这个示例,开发者可以更好地...
2. **创建Socket**:使用`socket`函数创建一个Socket实例,指定协议类型(如TCP或UDP)、地址族(通常为AF_INET,表示IPv4)和套接字类型(如SOCK_STREAM,用于TCP)。 3. **绑定Socket**:对于服务器端,使用`bind...
QT库是Qt公司开发的一个强大的跨平台应用程序开发框架,它提供了丰富的API用于创建GUI和非GUI应用程序。在QT中,TCP Socket通信是网络编程的重要部分,允许程序间通过Internet进行数据传输。本示例将深入讲解如何在...
这里的"windows下socket编程示例"是指使用C语言基础的Socket接口编写在Windows操作系统下的网络应用程序,而不是基于MFC(Microsoft Foundation Classes)库的CSocket类。CSocket是MFC对Winsock API的封装,而这里...
在这个"Socket聊天程序示例"中,我们探讨的是如何构建一个简单的网络聊天环境,其中每个终端都可以同时作为服务器和客户端进行交互。 首先,我们要了解Socket的基本概念。在TCP/IP协议栈中,Socket是应用层与传输层...