`
xchao
  • 浏览: 1758 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个Socket应用示例

阅读更多
近日一个项目需要所其它项目进行集成,需要用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();
		}
	}
}







3
7
分享到:
评论
3 楼 qingfengjushi1 2011-10-01  
一般实际应用Socket服务器端会采用线程池来实现。
2 楼 totti_1587 2011-10-01  
经典的教科书式的
1 楼 feargod 2011-09-30  
写得挺规范的,加油!

相关推荐

    vfp socket 应用示例

    - 使用`SOCKET()`函数打开一个Socket连接,指定服务器的IP地址和端口号。 - `OPEN`命令用于建立到服务器的连接。 - `SEND`命令将数据发送到服务器。 - `RECEIVE`命令接收服务器返回的数据。 - 最后,使用`CLOSE...

    C#应用socket示例

    要创建一个UDP Socket,首先需要指定地址族(通常为InterNetwork表示IPv4),套接字类型(UdpClient或Socket,这里我们关注Socket),以及协议类型(Udp): ```csharp Socket udpSocket = new Socket(Address...

    Java_socket 通信示例(Java源码)

    在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个示例的详细解读: 首先,让我们了解什么是Socket。在计算机网络中,Socket是应用...

    java程序socket编程示例代码

    Client端的实现主要是创建一个Socket对象,连接到服务器端的套接字,并与服务器端进行通信。下面是Client端的代码实现: ```java public class tcpClient { public static void main(String[] args) throws ...

    SOCKET 简单示例

    在IT行业中,网络编程是不可或缺的一...总的来说,"SOCKET简单示例"是一个很好的起点,让初学者能够深入理解网络通信的基础,为进一步学习网络编程,如HTTP、FTP等应用层协议,甚至更高级的网络编程技术打下坚实基础。

    android 与 PC socket 通信示例测试过

    在本示例中,`apksocket`可能是一个Android应用,包含了实现上述客户端逻辑的代码。同时,`PCsocket`可能是服务器端的应用程序,负责监听和处理来自Android设备的连接请求。为了在广域网中实现通信,可能需要配置...

    MFC socket服务器示例

    在"MFC socket服务器示例"中,MFCSocketServer可能是一个包含了完整示例代码的项目,它展示了如何将上述步骤整合到一个实际的MFC应用程序中。这个项目可能包含以下部分: - 主程序(如CWinApp派生类):负责初始化...

    JAVA Socket通信示例

    4. 连接成功后,服务器和客户端都各自拥有一个Socket实例,通过Socket的输入/输出流进行数据交换。 5. 数据传输完成后,关闭Socket和ServerSocket。 在"SocketDemo"这个示例中,我们可能会看到上述步骤的实现代码,...

    Socket应用的很好示例 !

    总的来说,这个"Socket应用的很好示例"是一个极好的学习资源,它可以帮助我们理解Socket通信的基础知识,以及如何在实际项目中运用这些知识。通过对代码的阅读和实践,我们可以加深对网络编程的理解,提高解决问题的...

    Android应用与framework的socket通信示例

    "MySocket"可能是示例项目中的一个关键文件,可能包含Android应用中的Socket客户端实现。通过阅读和分析这个文件,我们可以更深入地理解如何在实际项目中实现Android应用与framework层的Socket通信。 总的来说,...

    delphi API实现socket通信示例

    总之,"delphi API实现socket通信示例"是一个宝贵的教育资源,它可以帮助开发者掌握网络编程的基础,并为构建基于Socket的网络应用打下坚实基础。通过实践和理解这些API的用法,你可以创建出能够跨越网络通信的高效...

    SuperSocket示例源码,带客户端和服务器端

    【SuperSocket】是一个高度可定制、高性能的.NET Socket服务端开发框架,专为构建网络应用程序而设计。在本文中,我们将深入探讨SuperSocket的核心概念、功能特性,以及如何利用提供的客户端和服务器端示例源码进行...

    Socket连接示例代码

    首先,Socket在计算机网络中扮演着桥梁的角色,它允许两个程序(通常是一个服务器和一个客户端)通过网络进行数据交换。Socket接口提供了丰富的API,让开发者能够创建、配置和管理网络连接。在Java中,Socket类和...

    LinuxSocket示例代码

    - 首先,服务器需要创建一个Socket,调用`socket()`函数,指定地址族和套接字类型。 - 接着,服务器需要绑定一个本地地址,调用`bind()`函数,将Socket与特定的IP和端口号关联。 - 然后,服务器调用`listen()`...

    delphi xe 10.4 socket聊天示例

    在本示例中,我们探讨的是使用Delphi XE 10.4开发的一个基于Socket通信的简单聊天应用。这个应用的核心技术包括TServerSocket和TClientSocket组件,SQLite3数据库,以及自定义类和数组的运用。让我们逐一深入解析...

    Java Socket示例

    综上所述,"Java Socket示例"是一个展示如何在Java中使用Socket进行网络通信的基础应用,它涉及到了网络编程、多线程和GUI设计等多个方面,是学习Java网络编程的绝佳起点。通过理解和实践这个示例,开发者可以更好地...

    API实现socket通信示例

    2. **创建Socket**:使用`socket`函数创建一个Socket实例,指定协议类型(如TCP或UDP)、地址族(通常为AF_INET,表示IPv4)和套接字类型(如SOCK_STREAM,用于TCP)。 3. **绑定Socket**:对于服务器端,使用`bind...

    QT TCP Socket 通信示例

    QT库是Qt公司开发的一个强大的跨平台应用程序开发框架,它提供了丰富的API用于创建GUI和非GUI应用程序。在QT中,TCP Socket通信是网络编程的重要部分,允许程序间通过Internet进行数据传输。本示例将深入讲解如何在...

    windows下socket编程示例

    这里的"windows下socket编程示例"是指使用C语言基础的Socket接口编写在Windows操作系统下的网络应用程序,而不是基于MFC(Microsoft Foundation Classes)库的CSocket类。CSocket是MFC对Winsock API的封装,而这里...

    Socket聊天程序示例

    在这个"Socket聊天程序示例"中,我们探讨的是如何构建一个简单的网络聊天环境,其中每个终端都可以同时作为服务器和客户端进行交互。 首先,我们要了解Socket的基本概念。在TCP/IP协议栈中,Socket是应用层与传输层...

Global site tag (gtag.js) - Google Analytics