基础socket编程
server 端
#define MAXLINE 1024
int main() {
int n;
char buf[1024];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port(6666);
servaddr.sin_addr.s_addr = INADDR_ANY;
// servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
// inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
listen(sockfd, 10);
while (1) {
connfd = accept(sockfd, (struct sockaddr *) NULL, NULL);
n = recv(connfd, buf, MAXLINE, 0);
buf[n] = '\0';
printf("the msg recved is %s\n", buf);
}
}
client端
#define MAXLINE 1024
int main() {
sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(6666);
servaddr.sin_addr.s_addr = INADDR_ANY;
// clientaddr bind is not necessary.if not appear here,the client socket's port will be random.
struct sockaddr_in clientaddr;
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(8888);
clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
bind(sockfd, (struct sockaddr *) &clientaddr, sizeof(clientaddr));
// all the error can handled like this
if ((connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0) {
printf("connect error: %s(errno:%d)", strerror(errno), errno);
}
send(sockfd, sendline, strlen(sendline), 0);
close(sockfd);
}
客户端的bind函数不是必须的,如果不指定,则自动会随机分配一个端口。如果手动指定,sin_port一般指定1024之后的端口即可;sin_addr 要指定客户端自己的ip地址,否则报错:bind error:Cannot assign requested address(errno:99)
查看端口使用的情况 netstat -apn|grep a.out
浙公网安备 33010602011771号