我正在尝试在localhost中创建一个客户端/服务器程序,但客户端无法连接到服务器,我不知道我做错了什么.
我试图调试程序,所有参数似乎都没问题.服务器确实绑定,连接,监听和接受.
使用客户端代码获取connect: Invalid argument错误.客户端(我从控制台调用客户端./client localhost):
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char * argv[])
{
int cd;
struct hostent *hp;
struct sockaddr_in s_ain;
unsigned char byte;
hp = gethostbyname(argv[1]);
bzero((char *)&s_ain, sizeof(s_ain));
s_ain.sin_family = AF_INET;
memcpy(&(s_ain.sin_addr), hp->h_addr, hp->h_length);
s_ain.sin_port = htons(1025);
cd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if( connect(cd, (struct sockaddr*) &s_ain, sizeof(s_ain) == -1) ) {
fprintf(stderr, "connect: %s\n", strerror(errno));
return -1;
}
printf("%s\n", "IT WORKS!");
close(cd);
return …Run Code Online (Sandbox Code Playgroud) 我已经编制了不同的优化参数相同的程序:-O0,-O1,-O2,和-O3.我用过gcc和icc.您可以在下面看到make文件的一个片段:
build-gcc-O3: CXX = g++
build-gcc-O3: BIN_POST_NAME = -gcc-O3
build-gcc-O3: OPT_FLAGS = -O3
build-gcc-O3: fluidsGL
build-icc-O0: CXX = $(INTEL_ICPC)
build-icc-O0: BIN_POST_NAME = -icc-O0
build-icc-O0: OPT_FLAGS = -O0
build-icc-O0: fluidsGL
fluidsGL: fluidsGL.o fluidsGL_cpu.o bilinear_interpolation.o defines.o
$(CXX) $(CXXFLAGS) $(BINARY_DIR)/defines.o $(BINARY_DIR)/bilinear_interpolation.o $(BINARY_DIR)/fluidsGL_cpu.o $(BINARY_DIR)/fluidsGL.o -o $(BINARY_DIR)/$@$(BIN_POST_NAME)$(DBG_NAME_APPEND) $(OPT_FLAGS) -lGL -lGLU -lGLEW -lglut -lfftw3f
Run Code Online (Sandbox Code Playgroud)
运行make后,输出看起来很好.例如,这是icc的make结果命令-O3:
"/opt/intel/compilers_and_libraries/linux/bin/intel64/icpc" -Wall bin/defines.o bin/bilinear_interpolation.o bin/fluidsGL_cpu.o bin/fluidsGL.o -o bin/fluidsGL-icc-O3 -O3 -lGL -lGLU -lGLEW -lglut -lfftw3f
Run Code Online (Sandbox Code Playgroud)
编译后,fluidGL-gcc-O0和fluidsGL-gcc-O3(以及fluidGL-icc-O0 vs fluidsGL-icc-O3)二进制文件需要相同的磁盘空间,这对我来说似乎很奇怪:
$ ls -la bin/ …Run Code Online (Sandbox Code Playgroud)