导航:首页 > 编程语言 > c两个程序之间

c两个程序之间

发布时间:2023-08-31 05:55:28

Ⅰ 在C或C++中,怎么把俩个程序连在一起

可以把程序1作为头文件(program_1.h),在程序2中声明一下就可以了(include"program_1.h"),举一个回简单的例子吧:
程序答1(program_1.h):
void print(){
cout<<"Hello World!\n";
}

程序2(program_2.cpp):
include<iostream.h>
include"program_1.h"
void main(){
print();
}

Ⅱ C++ 两个程序之间怎么才能建立数据连接

这要用到网络编程 也就是socket编程
下面给出两个源代码一个是客户端,一个是服务端
他们可以进行连接通讯
服务端程序代码:
#include <stdio.h>
#include "scompat.h"

/* try to tell linker where WinSock library is */
#if defined(_MSC_VER)
# pragma comment(lib,"wsock32.lib")
#elif defined(__BORLANDC__)
# pragma comment(lib,"mswsock.lib")
#endif

#define WSA_ERROR(x) { printf("Error %d: %s\n", \
WSAGetLastError(), x); return 1; }

int ServerLoop(SOCKET sd_listen, int isMultiTasking);

main(int argc, char **argv)
{
SOCKET sd_listen;
int err;
u_short iPort;
struct sockaddr_in addr_srv;
struct hostent *ptrHost;
char *pszHost = "152.160.13.253";

iPort = (argc >= 2) ? atoi(argv[1]) : 9999;

InitSockets();
sd_listen = socket(PF_INET, SOCK_STREAM, 0);
if (sd_listen == INVALID_SOCKET) {
printf("Error: out of socket resources\n");
return 1;
}

if (atoi(pszHost)) {
u_long ip_addr = inet_addr(pszHost);
ptrHost = gethostbyaddr((char *)&ip_addr,
sizeof(u_long), AF_INET);
}
else
ptrHost = gethostbyname(pszHost);

if (!ptrHost)
WSA_ERROR("cannot resolve hostname")

addr_srv.sin_family = PF_INET;
addr_srv.sin_addr.s_addr = htonl(INADDR_ANY);
addr_srv.sin_port = htons(iPort);

err = bind(sd_listen, (const struct sockaddr *) &addr_srv,
sizeof(addr_srv));
if (err == INVALID_SOCKET)
WSA_ERROR("Error: unable to bind socket\n")

err = listen(sd_listen, SOMAXCONN);
if (err == INVALID_SOCKET)
WSA_ERROR("Error: listen failed\n")

ServerLoop(sd_listen, 1);
printf("Server is down\n");
WSACleanup();
return 0;
}

void ServeAClient(LPVOID lpv)
{
SOCKET sd_accept = (SOCKET) lpv;
const char *msg = "HELLO CLIENT";
char response[4096];

memset(response, 0, sizeof(response));
recv(sd_accept, response, sizeof(response), 0);
if (strcmp(response, "HELLO SERVER")) {
printf("Application: client not using expected "
"protocol %s\n", response);
}
else
send (sd_accept, msg, strlen(msg)+1, 0);
closesocket(sd_accept);
}

#define MAX_SERVED 3

int ServerLoop(SOCKET sd_listen, int isMultiTasking)
{
SOCKET sd_accept;
struct sockaddr_in addr_client;
int err, nSize;
int numServed = 0;
HANDLE handles[MAX_SERVED];
int myID;

while (numServed < MAX_SERVED) {

nSize = sizeof(addr_client);
sd_accept = accept(sd_listen, (struct sockaddr *)
&addr_client, &nSize);
if (sd_accept == INVALID_SOCKET)
WSA_ERROR("Error: accept failed\n")

printf("Accepted connection from client at %s\n",
inet_ntoa(addr_client.sin_addr));
if (isMultiTasking) {
#ifdef _WIN32
handles[numServed] = CreateThread(NULL, 1000,
(LPTHREAD_START_ROUTINE)ServeAClient,
(LPVOID) sd_accept, 0, &myID);
#else
myID = fork();
if (myID == 0) { /* I am child process */
ServeAClient ((LPVOID) sd_accept);
exit(0);
}
handles[numServed] = myID;
#endif
}
else
ServeAClient((LPVOID) sd_accept);
numServed++;
}

if (isMultiTasking) {
#ifdef _WIN32
err = WaitForMultipleObjects(MAX_SERVED, handles,
TRUE, INFINITE);
printf("Last thread to finish was thread #%d\n", err);
#endif
}
return 0;
}
客户端程序代码:#include <stdio.h>
#include "scompat.h"

/* try to tell linker where WinSock library is */
#if defined(_MSC_VER)
# pragma comment(lib,"wsock32.lib")
#elif defined(__BORLANDC__)
# pragma comment(lib,"mswsock.lib")
#endif

#define WSA_ERROR(x) { printf("Error %d: %s\n", \
WSAGetLastError(), x); return 1; }
void InitSockets(void);

main(int argc, char **argv)
{
SOCKET sd_client;
int err;
u_short iPort;
struct sockaddr_in addr_srv;
struct hostent *ptrHost;
char response[4096];
char *pszHost;
char *msg = "HELLO SERVER";

if (argc == 3) {
pszHost = argv[1];
iPort = atoi(argv[2]);
}
else {
printf("Usage:\t client1 [hostname] [portno]");
return 1;
}

InitSockets();
sd_client = socket(PF_INET, SOCK_STREAM, 0);
if (sd_client == INVALID_SOCKET)
WSA_ERROR("no more socket resources")

if (atoi(pszHost)) {
u_long ip_addr = inet_addr(pszHost);
ptrHost = gethostbyaddr((char *)&ip_addr,
sizeof(u_long), AF_INET);
}
else
ptrHost = gethostbyname(pszHost);

if (!ptrHost)
WSA_ERROR("cannot resolve hostname")

addr_srv.sin_family = PF_INET;
memcpy((char *) &(addr_srv.sin_addr),
ptrHost->h_addr, ptrHost->h_length);
addr_srv.sin_port = htons(iPort);

err = connect(sd_client, (struct sockaddr *) &addr_srv,
sizeof(addr_srv));
if (err == INVALID_SOCKET)
WSA_ERROR("cannot connect to server")

printf("You are connected to the server\n");
send (sd_client, msg, strlen(msg)+1, 0);
memset(response, 0, sizeof(response));
recv(sd_client, response, sizeof(response), 0);
printf("server says %s\n", response);
closesocket(sd_client);
WSACleanup();
return 0;
}

Ⅲ 求C语言高手,实现一个简单的TCPIP程序以实现两台计算机之间的聊天通信,

你上面给出的代码其实就是MSDN里面的演示代码,不过不完整,只演示了两个函数的使用,我给你看看我写的TCP通讯程序,可以在同一个局域网内的两台不同计算机之间聊天:

这其实就是某本将网络通讯的教程里面的例子,不过是我自己重写了一遍,下面给你代码:

========================

下面是公共代码:

========================

#ifndef__CINITSOCK__H__

#define__CINITSOCK__H__

#include<winsock2.h>

#include<iphlpapi.h>

#pragmacomment(lib,"ws2_32.lib")

#pragmacomment(lib,"iphlpapi.lib")

classCInitSock

{

public:

CInitSock(intnMinorVer=2,intnMajorVer=2)

{

WSADATAwsData;

WORDwVer=MAKEWORD(nMinorVer,nMajorVer);

if(0!=WSAStartup(wVer,&wsData))exit(0);

}

~CInitSock()

{

WSACleanup();

}

};

#endif

========================

下面是客户端的代码:

=======================

#include"CInitSock.h"

#include<iostream>

usingnamespacestd;

CInitSockg_Sock;

voidmain()

{

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sockClient)

return;

sockaddr_insockAddr;

sockAddr.sin_family=AF_INET;

sockAddr.sin_port=htons(4567);

sockAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

if(-1==connect(sockClient,(sockaddr*)&sockAddr,sizeof(sockAddr)))

{

cout<<"connectfailed"<<endl;

return;

}

while(true)

{

charszBuf[MAX_PATH];

ZeroMemory(szBuf,sizeof(szBuf));

cout<<"YouSay:";

cin>>szBuf;

if(SOCKET_ERROR ==send(sockClient,szBuf,MAX_PATH,0))

{

cout<<"sendfailed"<<endl;

return;

}

intnRecvLen=recv(sockClient,szBuf,MAX_PATH,0);

if(nRecvLen>0)

{

//szBuf[nRecvLen]='';

cout<<"ServiceSay:"<<szBuf<<endl<<endl;

}

else

{

cout<<"recvfailed"<<endl;

return;

}

}

closesocket(sockClient);

}

======================

下面是服务端的代码:

======================

#include"CInitSock.h"

#include<iostream>

usingnamespacestd;

CInitSockg_Sock;

voidmain()

{

SOCKETsockClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sockClient)

return;

sockaddr_insockAddr;

sockAddr.sin_family=AF_INET;

sockAddr.sin_port=htons(4567);

sockAddr.sin_addr.S_un.S_addr=INADDR_ANY;

bind(sockClient,(sockaddr*)&sockAddr,sizeof(sockAddr));

listen(sockClient,SOMAXCONN);

charszBuf[MAX_PATH];

sockaddr_inremoteAddr;

intnLen=sizeof(sockaddr_in);

SOCKETsock=accept(sockClient,(sockaddr*)&remoteAddr,&nLen);

while(true)

{

intnRecvLen=recv(sock,szBuf,MAX_PATH,0);

if(nRecvLen>0)

{

cout<<"ClientSay:"<<szBuf<<endl<<endl;

}

ZeroMemory(szBuf,sizeof(szBuf));

cout<<"YouSay:";

cin>>szBuf;

if(SOCKET_ERROR==send(sock,szBuf,MAX_PATH,0))

{

cout<<"sendfailed"<<endl;

}

}

closesocket(sock);

closesocket(sockClient);

}

希望能够帮到楼主。

Ⅳ 利用C语言写一个程序实现两个进程间进行管道通信

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#define N 10

#define MAX 100

int child_read_pipe(int fd)

{

char buf[N];

int n = 0;

while(1)

{

n = read(fd,buf,sizeof(buf));

buf[n] = '\0';

printf("Read %d bytes : %s.\n",n,buf);

if(strncmp(buf,"quit",4) == 0)

break;

}

return 0;

}

int father_write_pipe(int fd)

{

char buf[MAX] = {0};

while(1)

{

printf(">");

fgets(buf,sizeof(buf),stdin);

buf[strlen(buf)-1] = '\0';

write(fd,buf,strlen(buf));

usleep(500);

if(strncmp(buf,"quit",4) == 0)

break;

}

return 0;

}

int main()

{

int pid;

int fd[2];

if(pipe(fd) < 0)

{

perror("Fail to pipe");

exit(EXIT_FAILURE);

}

if((pid = fork()) < 0)

{

perror("Fail to fork");

exit(EXIT_FAILURE);

}else if(pid == 0){

close(fd[1]);

child_read_pipe(fd[0]);

}else{

close(fd[0]);

father_write_pipe(fd[1]);

}

exit(EXIT_SUCCESS);

}

Ⅳ 怎么连接两个C程序的源文件啊

c和c++的多文件编程规则是有差别的。下面只描述c的(主要是语法要求不太一样,体现在编译层面)。
简单来说,有两个层面的问题:
1
编译问题
2
链接问题
1
编译问题:
就是你的代码要能够编译通过,编译主要是对语法的检查。例如:
1
a文件用b文件里的函数问题:在c语言中,a文件用b文件的函数,缺省不用做任何说明(缺省就是全局函数,注意不能是static函数,当然建议写上extern的引用说明)。
2
但是如果a文件要用b文件的结构体。那么必须把结构体放到头文件里,两个源文件都去include。
不罗列了,简单来说,代码要复合c的语法要求。
2
链接问题:
多个源文件可以编译成编译单元(编译做得事),并且把这些编译单元链接到一起形成最终的可执行文件或动态/静态库。
注:编译单元,.o文件。
举例:有a.c和b.c
以gcc编译来说:(不考虑其他编译和链接情况)
gcc
-c
a.c
//生成a.o
gcc
-c
b.c
//生成b.o
gcc
-o
hello
a.o
b.o
//
a.c和b.c里面一个必须有main函数。输出hello可执行程序。
如果是在集成开发环境,例如vc、devc++、codebloker等。就在软件相关工程属性里勾选上或增加源文件就行。(工具屏蔽了编译链接技术细节)

Ⅵ 如何在c语言中打开另一个程序

用函数:
system("C:\\path\\c.exe");

path 填路径, 反斜杠画2杠,不是画1杠.

Ⅶ 如何实现两个exe之间的通信

关于在 Windows 系统下面的两个可执行文件(*.EXE)的互相通信问题,不是说随便拿来任意两个无关的可执行文件,它们之间就可以直接进行互相通信的。

如果真的想要达到两个 EXE 之间的互相通信,那么就必须要从编写程序源代码开始,即:在开始编写程序源代码的过程中就必须要考虑好这两个程序之间将来的互相通信方式、以及相关的通信协议等。这样,使用相关的程序编译器(例如 C 语言编译器)对这两个源程序(例如:这两个 C 语言源程序)进行编译、链接后,这样产生的两个可执行文件(*.EXE)肯定才是能够互相通信的。

阅读全文

与c两个程序之间相关的资料

热点内容
vc修改文件名 浏览:149
linux65从域 浏览:321
用什么东西压缩文件 浏览:406
怎么删除ipad隐藏的APP 浏览:981
编程如何占用大量内存 浏览:116
多个excel表格文件如何组合 浏览:918
ubuntu内核升级命令 浏览:679
pgp文件夹 浏览:894
一键还原的文件是什么格式 浏览:581
女汉子微信名霸气十足 浏览:65
win10手机蓝屏修复 浏览:419
windows2008激活工具 浏览:259
g71的编程应注意什么 浏览:572
文件路径不符合是什么意思 浏览:543
qq如何换绑微信绑定 浏览:67
文件包下载的安装包在哪里 浏览:811
90版本升级不送 浏览:186
工具箱英文 浏览:382
南翔嘉定编程课哪里好 浏览:853
win10改变文件格式 浏览:475

友情链接