我刚刚完成了客户端服务器编程。客户端-服务器程序正在运行,服务器正确回复它已收到字节。
现在我想以某种方式做到这一点,这样我就不需要运行“服务器”程序。我只想让客户端程序运行并在同一台机器上输入 ip 即 127.0.0.1 ...它应该连接。它应该正确连接以执行诸如将字节/罚款发送到服务器等操作
这可能吗,请帮助。(从这个意义上说,不需要服务器编程)。我只想让客户端程序运行并连接到服务器并将数据发送到远程电脑。
不,那是不可能的。
没有服务器就不能拥有客户端/服务器,如果没有什么可连接的,则不能“仅连接”。
一个特定的 IP 地址和端口是“开放的”意味着该主机上正在运行一些服务,它正在侦听该端口。
不,您不可能必须分别编写一个客户端程序和一个服务器程序,并且您可以使用此环回 ip,但您还需要编写两个程序
POST 方法使用 http 标头,因此需要阅读一些关于它的编程的信息 这里是该 POST 方法的一个小例子
#include<stdio.h>
#include<stdlib.h>
#include<usr/mynetwork.h>
int main(int argc, char** argv) {
int sockfd, n;
char buff[MAXLINE],recvline[MAXLINE];
struct sockaddr_in servaddr;
if(argc != 3){
printf("usage: httppostconnect <ipaddress> <relative_url>");
exit(0);
}
if( (sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1 ){
printf("socket: error");
exit(0);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80); //connect to http server
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr) < 0){
printf("port: assigned invalid");
exit(0);
}
if( connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) == -1){
printf("connect: error");
exit(0);
}
//Sending Http header
bzero(&buff,sizeof(buff));
char postdata[] = "param1=value1¶m2=value"; /* Change param and value here */
sprintf(buff,"POST %s HTTP1.1\r\nAccept: */*\r\nReferer: <REFERER HERE>\r\nAccept-Language: en-us\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept-Encoding: gzip,deflate\r\nUser-Agent: Mozilla/4.0\r\nContent-Length: %d\r\nPragma: no-cache\r\nConnection: keep-alive\r\n\r\n%s",argv[2],strlen(postdata),postdata);
if(write(sockfd,buff,strlen(buff)+1) == -1)
err_exit("write");
while ((n =read(sockfd,recvline,sizeof(recvline))) > 0){
recvline[n] = 0;
if(fputs(recvline,stdout) == EOF)
err_abort("read error");
}
return (EXIT_SUCCESS);
}
套接字连接总是需要一个端点充当客户端,一个端点充当服务器。
但是您可以做的是通过打开客户端和服务器套接字来创建一个既充当客户端又充当服务器的应用程序。