用socket进行本机进程间通讯 (转)
#include<winsock2.h>
#include<iostream>
#include<windows.h>
using namespace std;
//extern "C"{
int main(int argc, char** argv){
int clientlen;
struct sockaddr_in clientaddr;
struct hostent *hp;
char *haddrp;
char chInfo[64];
WSADATA wsaData;
int ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if(ret != 0){
cout << "Error" << endl;
WSACleanup();
}
if (gethostname(chInfo, sizeof(chInfo)))
cout<<"\n无法获取主机!\n ";
cout << chInfo << endl;
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket==INVALID_SOCKET){
MessageBox(NULL, "创建套接字失败!", "Warning", MB_ICONEXCLAMATION);
closesocket(serverSocket);
WSACleanup();
}
sockaddr_in localaddr;
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(6000);
if(bind(serverSocket, (const struct sockaddr*)&localaddr, sizeof(localaddr)) == SOCKET_ERROR){
MessageBox(0,"绑定地址失败!","Warning", MB_ICONEXCLAMATION);
closesocket( serverSocket);
WSACleanup();
}
listen(serverSocket, 5);
while (true)
{
clientlen = sizeof(clientaddr);
SOCKET connfd = accept(serverSocket, (struct sockaddr*) &clientaddr, &clientlen);
hp = gethostbyaddr((const char*) &clientaddr.sin_addr.S_un, sizeof(clientaddr.sin_addr.S_un), AF_INET);
haddrp = inet_ntoa(clientaddr.sin_addr);
cout << "server connected to " << hp->h_name <<"( "<<haddrp<<" )"<<endl;
int length;
//char buffer[5];
//if ((length = recv(connfd, buffer, 5, 0)) == SOCKET_ERROR)
char buffer[10240];
if ((length = recv(connfd, buffer, 10240, 0)) == SOCKET_ERROR)
MessageBox(0,"接收失败!","Warning", MB_ICONEXCLAMATION);
for(int i=0;i<length;i++)
cout<<buffer[i];
cout<<endl;
closesocket(connfd);
}
closesocket( serverSocket);
WSACleanup();
return 0;
}
- C/C++ code
-
#include <winsock2.h> #include <iostream> #include <windows.h> #include <memory.h> using namespace std; int main(){ struct hostent *hp; struct in_addr addr; struct sockaddr_in serverAddr; WSADATA wsaData; int ret = WSAStartup(MAKEWORD(2,2), &wsaData); if(ret != 0){ cout << "Error" << endl; WSACleanup(); } SOCKET clientfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientfd == INVALID_SOCKET) { MessageBox(0,"创建套接字失败!","Warning", MB_ICONEXCLAMATION); closesocket(clientfd); WSACleanup(); } addr.s_addr = inet_addr("192.168.168.135"); hp = gethostbyaddr((const char *)&addr,sizeof(addr),AF_INET); memset(&serverAddr,'\0',sizeof(struct sockaddr_in)); memcpy((char*)&serverAddr.sin_addr,(char *)hp->h_addr_list[0],hp->h_length); //OK serverAddr.sin_family = hp->h_addrtype; serverAddr.sin_port = htons(6000); if(connect(clientfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr))<0) cout<<"error"<<endl; int length; char buffer[5]; for(int i=0;i<5;i++) buffer[i]='a'; if ((length = send(clientfd, buffer, 5, 0)) == SOCKET_ERROR) MessageBox(0,"发送失败!","Warning", MB_ICONEXCLAMATION); return 0; }
饮水思源,不忘初心。
要面包,也要有诗和远方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)