如题,求用socket进行本机进程间通讯的例子
解决方案 »
- ocx注册后怎么路径不是完整的
- 请教关于在STATIC中绘图的问题!
- 布局new操作的问题请教: 1.为何声明的静态数组arr1 是 char 型,我在main()中依然可以用 p2=new(arr1) int;呢?这样是整型呀?
- 文件夹遍历问题
- 图形化编程界面问题
- 想用sdk寫個程序,如何刪除開始菜單中程序裏的快捷方式?
- CToolBar能不能动态的增加或者删除BUTTON,怎么做
- 小弟愚笨:VC.Net与VC++有什么不同啊?
- 如何在2000下访问特定端口
- 在SQL语句中日期和时间的格式应该怎么写呀!谢谢!
- 对于Unicode方式的字符串,在保存时可否转化为ASCII文件?
- 怎么把CString里的数字串取到整形变量里呢
多多实践对自己真的很有帮助,
我有这样的感受,因为我也是一个初学着,希望我们以后一起+U
给出的例子如下:
服务器代码:
#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;
}
#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;
}