#include<iostream>
#include<winsock2.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
#define PORT 8888
#define IP_ADDRESS "127.0.0.1"
DWORD WINAPI ClientThread(LPVOID lpParameter){
SOCKET ClientSocket = (SOCKET)lpParameter;
int Ret = 0;
char RecvBuffer[MAX_PATH];
while(true){
memset(RecvBuffer,0,sizeof(RecvBuffer));
Ret = recv(ClientSocket,RecvBuffer,MAX_PATH,0);
if(Ret == 0 || Ret == SOCKET_ERROR){
cout << "客户端退出" << endl;
closesocket(ClientSocket);
break;
}
cout << "接收到的客户端信息为:" << RecvBuffer << endl;
}
return 0;
}
int main(){
WSADATA Ws;
SOCKET ServerSocket,ClientSocket;
struct sockaddr_in LocalAddr,ClientAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
if(WSAStartup(MAKEWORD(2,2),&Ws) != 0){
cout << "Init Windows Socket Failed::" << GetLastError() << endl;
return -1;
}
ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET){
cout << "Create Socket Failed::" << GetLastError() << endl;
return -2;
}
LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
LocalAddr.sin_port = htons(PORT);
memset(LocalAddr.sin_zero,0,0);
Ret = bind(ServerSocket,(struct sockaddr*)&LocalAddr,sizeof(LocalAddr));
if(Ret != 0){
cout << "Bind Socket Failed :: " << GetLastError() << endl;
return -3;
}
Ret = listen(ServerSocket,10);
if(Ret != 0){
cout << "listen socket failed::" << endl;
return -4;
}
cout << "服务器端已经启动" << endl;
while(true){
AddrLen = sizeof(ClientAddr);
ClientSocket = accept(ServerSocket,(struct sockaddr*)&ClientAddr,&AddrLen);
if(ClientSocket == INVALID_SOCKET){
cout<< "Accept Failed::" << GetLastError() << endl;
break;
}
cout << "客户端连接::" << inet_ntoa(ClientAddr.sin_addr) << ":" << ClientAddr.sin_port << endl;
hThread = CreateThread(NULL,0,ClientThread,(LPVOID)ClientSocket,0,NULL);
if(hThread == NULL){
cout << "Create Thread Failed :: " << endl;
break;
}
CloseHandle(hThread);
}
closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();
return 0;
}
package com.xiuye.socket;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class WindowsClientSocket {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost", 8888);
String str = "服务器,我是客户端,收到请回答!";
OutputStream out = s.getOutputStream();
out.write(str.getBytes("GBK"));//注意服务器端编码
PrintWriter pw = new PrintWriter(out);
pw.println(str);
pw.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端已经启动
客户端连接::127.0.0.1:37642
接收到的客户端信息为:鏈嶅姟鍣?鎴戞槸瀹㈡埛绔?鏀跺埌璇峰洖绛?鏈嶅姟鍣?鎴戞槸瀹㈡
埛绔?鏀跺埌璇峰洖绛?
客户端退出
客户端连接::127.0.0.1:38154
接收到的客户端信息为:服务器,我是客户端,收到请回答!鏈嶅姟鍣?鎴戞槸瀹㈡埛绔?鏀跺埌
璇峰洖绛?
客户端退出
客户端连接::127.0.0.1:38410
接收到的客户端信息为:服务器,我是客户端,收到请回答!鏈嶅姟鍣?鎴戞槸瀹㈡埛绔?鏀跺埌
璇峰洖绛?
客户端退出
客户端连接::127.0.0.1:38666
接收到的客户端信息为:服务器,我是客户端,收到请回答!鏈嶅姟鍣?鎴戞槸瀹㈡埛绔?鏀跺埌
璇峰洖绛?
客户端退出
^C