socket程序例子

socket程序例子
服务端: ServerSocket server1 = new ServerSocket(8080); System.out.println("Started: "+server1);//服务器信息 /*阻塞在这里,等客户端连接,该例子只能有一个客户连接到一个端口,如果要能多个连接的,要为每个连接的开个线程,建立连接后,就和一个客户端建立了socket连接,然后就用socket1.getInputStream()和socket1.getOutputStream()来收发信息了;*/ Socket socket1 = server1.accept(); System.out.println("socket1: "+socket1);//获得客户端信息 InputStream ins = socket1.getInputStream(); //读客户发来的信息 BufferedReader in = new BufferedReader(new InputStreamReader(ins));//客户端输入信息 OutputStream outs = socket1.getOutputStream(); //准备向客户发送信息 PrintStream out = new PrintStream(outs); //键盘输入,后输出客户端 BufferedReader userin = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("wait client1...."); str = in.readLine();//客户端 System.out.println("client1:"+str); if(str.equals("end"))break; str = str=userin.readLine();//键盘输入 out.println(str); if(str.equals("end"))break; } socket1.close(); server1.close(); 客户端: InetAddress addr=InetAddress.getByName("127.0.0.1"); Socket socket1 = new Socket(addr,8080); System.out.println("socket1:"+socket1); InputStream ins = socket1.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(ins));//客户端输入信息 OutputStream outs = socket1.getOutputStream(); PrintStream out = new PrintStream(outs); //从键盘输入,然后后输出到服务端端 BufferedReader userin = new BufferedReader(new InputStreamReader(System.in)); while(true) { System.out.println("please input char..."); str1 = userin.readLine(); out.println(str1); System.out.println("waiting for server..."); if(str1.equals("end")) { break; } str1 = in.readLine(); System.out.println("svrver:t"+str1); if(str1.equals("end")) { break; } } socket1.close();

### 使用 Socket 类编写的网络程序代码示例 以下是基于 C++ 的 `Socket` 类封装实现的一个简单示例,该类用于简化 TCP 客户端和服务器的开发过程。此示例展示了如何通过面向对象的方式创建并管理套接字连接。 #### Socket 类定义 ```cpp #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <arpa/inet.h> class Socket { private: int sock_fd; struct sockaddr_in addr; public: Socket() : sock_fd(-1) {} ~Socket() { if (sock_fd != -1) { close(sock_fd); } } bool create() { sock_fd = socket(AF_INET, SOCK_STREAM, 0); if (sock_fd < 0) { std::cerr << "Failed to create socket." << std::endl; return false; } return true; } bool bind(const char* ip, unsigned short port) { memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); if (::bind(sock_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { std::cerr << "Bind failed." << std::endl; return false; } return true; } bool listen(int backlog = SOMAXCONN) { if (::listen(sock_fd, backlog) < 0) { std::cerr << "Listen failed." << std::endl; return false; } return true; } bool accept(Socket& new_sock) { int client_fd = ::accept(sock_fd, nullptr, nullptr); if (client_fd < 0) { std::cerr << "Accept failed." << std::endl; return false; } new_sock.sock_fd = client_fd; return true; } bool connect(const char* ip, unsigned short port) { memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(ip); if (::connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { std::cerr << "Connect failed." << std::endl; return false; } return true; } bool send_data(const void* data, size_t length) const { ssize_t bytes_sent = ::send(sock_fd, static_cast<const char*>(data), length, 0); if (bytes_sent < 0 || static_cast<size_t>(bytes_sent) != length) { std::cerr << "Send failed or incomplete." << std::endl; return false; } return true; } bool recv_data(void* buffer, size_t length, size_t& bytes_received) const { bytes_received = ::recv(sock_fd, static_cast<char*>(buffer), length, 0); if (bytes_received <= 0) { std::cerr << "Receive failed or connection closed." << std::endl; return false; } return true; } }; ``` --- #### TCP 服务端示例 ```cpp int main() { Socket server_socket; if (!server_socket.create()) { return EXIT_FAILURE; } if (!server_socket.bind("127.0.0.1", 12345)) { return EXIT_FAILURE; } if (!server_socket.listen()) { return EXIT_FAILURE; } std::cout << "Server is listening on port 12345..." << std::endl; Socket client_socket; if (!server_socket.accept(client_socket)) { return EXIT_FAILURE; } std::cout << "Client connected!" << std::endl; char buffer[1024]; size_t bytes_received; while (true) { if (!client_socket.recv_data(buffer, sizeof(buffer) - 1, bytes_received)) { break; } buffer[bytes_received] = '\0'; std::cout << "Received from client: " << buffer << std::endl; if (!client_socket.send_data(buffer, strlen(buffer))) { break; } } std::cout << "Client disconnected." << std::endl; return EXIT_SUCCESS; } ``` --- #### TCP 客户端示例 ```cpp int main() { Socket client_socket; if (!client_socket.create()) { return EXIT_FAILURE; } if (!client_socket.connect("127.0.0.1", 12345)) { return EXIT_FAILURE; } std::cout << "Connected to server at 127.0.0.1:12345" << std::endl; char message[] = "Hello, Server!"; if (!client_socket.send_data(message, strlen(message))) { return EXIT_FAILURE; } char buffer[1024]; size_t bytes_received; if (!client_socket.recv_data(buffer, sizeof(buffer) - 1, bytes_received)) { return EXIT_FAILURE; } buffer[bytes_received] = '\0'; std::cout << "Response from server: " << buffer << std::endl; return EXIT_SUCCESS; } ``` 以上代码实现了基于 `Socket` 类的客户端和服务端通信功能[^1][^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值