server + client by socket

本文提供了一个Java Socket编程的基础示例,包括客户端和服务端的实现方式。服务端监听特定端口接收客户端消息并打印,客户端连接到服务端并发送输入的消息。
Java 的通信编程,编程题(或问答),用 JAVA SOCKET 编程, 读服务器几个字符,再写入本地显示?

Server端
public class Server {
public static void main (String [] args){
new Server();
}
public Server(){
ServerSocket ss = null ;
Socket soc;
BufferedReader in = null;
try {
ss=new ServerSocket(12345);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true)
try {
soc = ss.accept();
System.out.println("有人进来了 ip为:"+soc.getInetAddress().getHostAddress()+" : "+soc.getPort());
in = new BufferedReader(new InputStreamReader(soc.getInputStream()));
System.out.println("Client send is "+in.readLine());
} catch (IOException e) {
if(ss!=null){
try {
System.out.println("服务端错误处理");
ss.close();
} catch (IOException e2) {
}
}
// TODO Auto-generated catch block
System.out.print("错误是"+e.getLocalizedMessage());
e.printStackTrace();
}
}
}


Client端
public class Client {
Socket socket;
public static void main(String[] args) {
// TODO Auto-generated method stub
new Client();
}
public Client(){
PrintWriter out = null;
BufferedReader in =null;
try {
socket = new Socket("127.0.0.1",12345);
System.out.println("Server Connect Success");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true){
try {
System.out.println("打字:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(br.readLine());
in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("client in :" + in.readLine());
} catch (Exception e) {
try {
System.out.println("Client is wrong");
socket.close();
out.close();
in.close();
} catch (Exception e1e) {
}
}
}
}
}
### C++ 实现 Socket 客户端与服务器通信的代码示例 以下是一个完整的 C++ 示例,展示了如何使用 Socket API 实现客户端和服务器之间的 TCP 通信。 #### 服务器端代码 ```cpp #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); // 创建套接字 SOCKET server_socket = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == server_socket) { printf("Socket creation failed!\n"); return -1; } // 绑定地址和端口 struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8888); server_addr.sin_addr.s_addr = INADDR_ANY; if (bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) { printf("Bind failed!\n"); closesocket(server_socket); return -1; } // 监听连接请求 if (listen(server_socket, 5) == SOCKET_ERROR) { printf("Listen failed!\n"); closesocket(server_socket); return -1; } printf("Server is listening...\n"); // 接受客户端连接 SOCKET client_socket; struct sockaddr_in client_addr; int client_addr_len = sizeof(client_addr); client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_addr_len); if (client_socket == INVALID_SOCKET) { printf("Accept failed!\n"); closesocket(server_socket); return -1; } printf("Client connected.\n"); // 开始通信 char buffer[1024]; while (true) { int bytes_received = recv(client_socket, buffer, sizeof(buffer), 0); if (bytes_received > 0) { buffer[bytes_received] = '\0'; printf("Received: %s\n", buffer); // 发送响应 send(client_socket, "Message received by server.", 27, 0); } else if (bytes_received == 0) { printf("Client disconnected.\n"); break; } else { printf("Receive failed.\n"); break; } } // 关闭连接 closesocket(client_socket); closesocket(server_socket); WSACleanup(); return 0; } ``` #### 客户端代码 ```cpp #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); // 创建套接字 SOCKET client_socket = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == client_socket) { printf("Socket creation failed!\n"); return -1; } // 连接服务器 struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = htons(8888); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if (connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)) == SOCKET_ERROR) { printf("Connect failed!\n"); closesocket(client_socket); return -1; } printf("Connected to server.\n"); // 开始通信 while (true) { char sbuffer[1024] = { 0 }; printf("Enter message to send:"); scanf("%s", sbuffer); if (send(client_socket, sbuffer, strlen(sbuffer), 0) == SOCKET_ERROR) { printf("Send failed!\n"); break; } char rbuffer[1024] = { 0 }; int ret = recv(client_socket, rbuffer, sizeof(rbuffer), 0); if (ret <= 0) { printf("Receive failed or connection closed.\n"); break; } printf("Server response: %s\n", rbuffer); } // 关闭连接 closesocket(client_socket); WSACleanup(); return 0; } ``` ### 说明 - 上述代码实现了基于 TCP 协议的 Socket 通信[^1]。 - 服务器端监听指定端口(如 8888),等待客户端连接,并与之进行消息交换。 - 客户端连接到服务器后,可以发送消息并接收服务器的响应。 - 使用 `WSAStartup` 初始化 Winsock 库,确保在 Windows 环境下正常运行[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值