import java.nio.*;
import java.nio.channels.*;
import java.net.*;
import java.io.*;
import java.nio.charset.*;
public class Client {
public SocketChannel client = null;
public InetSocketAddress isa = null;
public RecvThread rt = null;
public Client() {
}
public void makeConnection() {
int result = 0;
try {
client = SocketChannel.open();
isa = new InetSocketAddress("localhost", 9000);
client.connect(isa);
client.configureBlocking(false);
receiveMessage();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
result = sendMessage();
while (result != -1) {
}
try {
client.close();
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
}
public int sendMessage() {
System.out.println("Inside SendMessage");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
ByteBuffer bytebuf = ByteBuffer.allocate(1024);
int nBytes = 0;
try {
msg = in.readLine();
System.out.println("msg is " + msg);
bytebuf = ByteBuffer.wrap(msg.getBytes());
nBytes = client.write(bytebuf);
System.out.println("nBytes is " + nBytes);
if (msg.equals("quit") || msg.equals("shutdown")) {
System.out.println("time to stop the client");
interruptThread();
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
client.close();
return -1;
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Wrote " + nBytes + " bytes to the server");
return nBytes;
}
public void receiveMessage() {
rt = new RecvThread("Receive THread", client);
rt.start();
}
public void interruptThread() {
rt.val = false;
}
public static void main(String args[]) {
Client cl = new Client();
cl.makeConnection();
}
public class RecvThread extends Thread {
public SocketChannel sc = null;
public boolean val = true;
public RecvThread(String str, SocketChannel client) {
super(str);
sc = client;
}
public void run() {
System.out.println("Inside receivemsg");
int nBytes = 0;
ByteBuffer buf = ByteBuffer.allocate(2048);
try {
while (val) {
nBytes = client.read(buf);
while (nBytes > 0) {
buf.flip();
Charset charset = Charset.forName("gb2312");
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buf);
String result = charBuffer.toString();
System.out.println(result);
buf.flip();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
使用MFC实现非阻塞套接字通信,可以多个客户端和一个服务器任意通信,通信协议采用protobuf,代码可直接运行exe文件,平台为vs2013。
这是封装的socket库,用poll采用非阻塞模式,接收消息与网线断开处理以回调函数方式到应用层处理,使用起来非常方便,带服务端和客户端的测试实例
1.采用重叠I/O方式实现的socket网络编程,异步非阻塞方式,代码效率比阻塞式的socket编程方式高。2.实现了TCP server方式,只用于服务端,可以支持多客户端。3.可以使用在各种场合用于监控网络数据。4.代码封装成库...
来源github的esp32 tcp 客户端和服务端程序,支持阻塞和非阻塞
使用VS2015编译通过 程序启动命令行 --workmode 0-5 --netmode 0 --ip 127.0.0.1 --port 6000 在程序启动时候创建一个工作模式的代理来...支持阻塞式客户端,阻塞式服务器,使用IOCTL,Select,IOCP实现了非阻塞式服务器
客户端 / 服务器echo 程序 echo 程序的服务端 echo 程序的客户端 运行echo 程序的客户端和服务端 查看 socket 状态 通信流程的分解 处理多个连接 多连接的客户端 / 服务器程序 多连接的服务端 多连接的客户端 运行多...
有错误本例通过socket通信实现安卓客户端控制PC。从PC上下载文件从手机本地上传文件到PC控制PC鼠标控制PC关机相当于是电脑遥控器。运行时保证PC和手机客户端在同一个网段.rar,太多无法一一验证是否可用,程序如果跑...
这个程序要完成一个聊天室的功能,它是用纯的winsock的去写,而不用任何CSocket的东西, 即可以用来做客户端又可以用来做服务器端,它要求是非阻塞方式的连接。
包括TCP服务器客户端多线程通信程序(用select实现),基于Visual Studio2017实现,已编译测试过,用到的朋友记得关闭SDL检查
采用SOCKET API 异步I/0 非阻塞方式编写的与多个服务器进行通讯的客户端程序, mfc下编写。
网络编程,当然要用到Windows Socket(套接字)技术。Socket相关的操作由一系列...因此,建议初学者学习编网络通信程序时,暂且不要用MFC提供的类,而先用Winsock2 API,这样有助于对异步、非阻塞Socket编程机制的理解。
一个简单且简陋的小测试程序,支持服务器对某客户端,服务器对所有客户端,客户端之间的通信。TCP Socket基于CAsyncSocket的非阻塞异步通信。效果图详见:http://blog.chinaunix.net/uid-28394603-id-5163195.html
selectors 模块允许socket 以非阻塞的方式进行通信,selectors 相当于事件注册中心,程序只要将所有事件注册给selectors 管理,当selectors 检测到socket 中的特定事件后,程序就调用相关的监听方法进行处理。...
在非阻塞 . Socket.IO 是一个 JavaScript 库,用于为不支持它的浏览器提供完整的 Websocket 模拟。 虽然客户端程序员编码时好像他们有一个持续开放的双向通信通道,但 Socket.IO 将(如果浏览器不支持 Websockets)...
方法:利用VC++6.0的异步非阻塞Socket封装类CAsyncSocket及线程,在客户端和服务器端进行数据转换后的发送和接受。结果:实现了从服务器端接受客户端传送的数据。结论:提供了在基于对话框的程序中进行数据传送的一种...
程序分为Server端代码,客户端DLL动态连接库程序和Client调用程序,程序实现了TClientSocket和TServerSocket 无法实现的非窗口程序下的socket处理,程序服务端采用非阻塞连接,多线程发送的技术。
采用重叠I/O方式实现的socket网络编程,异步非阻塞方式,代码效率比阻塞式的socket编程方式高。实现了TCP server,TCP client,UDP server,UDP client,四种方式可选,可以使用在各种场合用于监控网络数据。本程序...
VC++实现 使用SOCKET编程中select模型实现文件下载
第二部分(第7~12章),以FTP客户端实例为基础介绍了函数实例库,还介绍了客户端程序、服务器程序和DLL中间构件及它们的相应函数,并涵盖socket命令和选项及移植BSDSockets相关事项等;第三部分(第13~17章),...