(一)第一个例子是简单的Socket通信,一个客户端和一个服务器线程:
/**
* SimpleClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SimpleClient {
public static void main(String[] args) {
Socket socket = null;
BufferedReader reader = null;
PrintWriter writer = null;
try {
//请求建立通信套接字
socket = new Socket("localhost",8089);
//获取输入输出流
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true); //true means autoFlush
//while(true){
writer.println("hello, I am Client\n");
String mess = reader.readLine();
System.out.print("Client Receive:"+mess);
//}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket != null) socket.close();
if(reader != null) reader.close();
} catch (IOException e) {
e.printStackTrace();
}
if(writer != null) writer.close();
}
}
}
/**
* SimpleServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
ServerSocket ss = null; //用于接收请求的Socket
Socket socket = null; //用于通信的Socket
BufferedReader reader = null;
PrintWriter writer = null;
try {
ss = new ServerSocket(8089);
System.out.print("waiting for new request...\n");
socket = ss.accept(); //等待请求,建立通信Socket
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new PrintWriter(socket.getOutputStream(), true);
String mess = reader.readLine();
System.out.print("Server Receive:"+mess);
writer.println("Yes, I can hear you");
} catch (IOException e) {
e.printStackTrace();
}
}
}
(二)第二个列子是在服务器端,采用多线程方式处理来自客户端的请求:
/**
* TCPClient.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
private static int id = 0;
public static void main(String[] args) {
String host = "localhost";
int port = 8060;
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
//创建五个请求服务器连接的客户端
for(int i=0;i<5;i++){
//创建通信套接字
socket = new Socket(host, port);
//获取套接字的输入输出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//向服务器发送消息
out.println("hello, i am client "+(++id));
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Socket...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
/**
* TCPServer.java
*/
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
int port = 8060;
Socket socket = null;
ServerSocket server = null;
try {
//创建服务器套接字
server = new ServerSocket(port);
while(true){
//接收来自客户端的请求,建立通信套接字
System.out.print("waiting for new request...\n");
socket = server.accept();
//创建一个线程处理该请求
Thread t = new Thread(new ServerThread(socket));
t.start();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(server != null) server.close();
if(socket != null) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 处理来自客户端请求的线程
* */
class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket s){
this.socket = s;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
//获取套接字的输入输出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
//读取客户端发送来的消息
String s = in.readLine();
System.out.println("recv:"+s);
//out.write("accept");
} catch (IOException e) {
e.printStackTrace();
}finally{
System.out.print("Closing Connection...\n");
try {
if(socket != null) socket.close();
if(in != null) in.close();
} catch (IOException e) {
e.printStackTrace();
}
if(out != null) out.close();
}
}
}
分享到:
相关推荐
Socket,又称套接字,在TCP/IP协议分层架构中,属应用层和传输层之间的一个抽象层(也有的说是属于传输层),它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。 ![在这里插入图片描述...
基于套接字的聊天室服务器端c程序源码,套接字主要用来实现网络通信
实验内容:JAVA网络通信的基本应用 实验基本步骤: 1、编写程序获取Internet上主机的地址 2、利用套接字编写程序,实现客户端向服务器发送三段信息,服务器一一给出应答的功能 3、编写程序实现利用客户端输入圆半径...
利用原始套接字实现PING功能的源代码(13kb)
1.socket编程 2.java实现客户端和服务器的通信 3.TCP通信
工程原理:利用套接字,连接指定ip和port机子 Java提供net.ServerSocket;net.Socket;类。 该资源内项目源码是个人的课程设计作业,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用...
zeromq的多套接字处理的jave实现,Eclipse下的maven工程,相关引用已在pom文件引入,可以直接运行。如何读取多个套接字中的消息呢?最简单的方法是将套接字连接到多个端点上,让ZMQ使用公平队列的机制来接受消息。...
基于JAVA的客户/服务器程序源代码,java网络编程,使用Socket套接字编写网络通信程序。
在用java语言编写“畅聊吧”用到的有关关于套接字相关的知识点,是实现网络通信的原理性知识,看过之后可以明白服务器是怎么回事,希望对你的学习有所帮助
Socket(套接字) 是一种抽象层, 应用程序通过它来发送和接收数据, 就像应用 程序打开一个文件句柄, 将数据读写到稳定的存储器上一样。 一个 socket 允许 应用程序添加到网络中, 并与处于同一个网络中的其他应用...
利用java实现网络编程
一个简单的java程序,使用java套接字通过网络进行通信并作为gui摆动 客户 司机 从这里开始。 包含图形用户界面 客户端中继包含后端代码 服务器端 司机 从这里开始。 包含图形用户界面 中继服务器包含后端代码 客户端...
随着网络通信技术的不断发展,Socket开发和研究已成为... 本文从多个方面介绍了Socket的应用开发、实现环境以及工作流程,并用JAVA开发工具在Windows NT系统上实现网络通讯为例来对Socket套接字做了更加深入的介绍。
网络即时通信的主程序 使用Socket网络编程套接字实现网络通信连接`本程序属于通讯系统的主程序功能模块
套接字教程Python 和 Java 中的套接字教程。 虽然我已经包含了用于在 Python 和 Java 中设置服务器的文件,以及在 Python 和 Java 中设置客户端的文件,但我打算只介绍带有 Java 客户端的 Python 服务器。 随意玩...
使用 Java 套接字的聊天应用程序 - TCP 指示 : 启动run.bat。 将为您打开三个客户端,您可以测试三个控制台之间的聊天。 如果从客户端连接到服务器时出现问题,您必须使用您自己 LAN 上的 IP 更改 ChatClient....
java实现多线程在线画图,实现聊天框功能。画图内容实时共享。分为服务端和客户端程序,通过java socket通信,多线程共享画图内容。
利用TCP/IP协议提供的编程接口———Socket(套接字)可以开发出TCP/IP应用程序。正确的使用WindowsSocket,就可使得不同地址下的进程得以在Windows环境下顺利进行各种网络通信,因此研究WinSock更有意义。而基于TCP/IP...
套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般...
套接字是通信的基础,这是支持网络通信协议的基本接口,套接字是不同的进程之间进行网络通信的基础,在本次实现中我采用了流式套接字,流式套接字提供了双向的、有序的、可靠的数据流服务。它是面向连接的,在数据...