1、TCP服务器
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h>
void error_handling(char * message) { fputs(message, stderr); fputc(’\n’, stderr); exit(1); }
int main(int argc, char*argv[]) { int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; socklen_t clnt_addr_size; char message[] = “hello world”;
if(argc != 2)
{
printf("usage:%s <port>\n", argv[0]);
exit(1);
}
//创建socket
serv_sock = socket(PF_INET, SOCK_STREAM,0);
if(serv_sock == -1)
{
error_handling("socket() error\n");
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
//绑定地址和端口号
if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)
{
error_handling("bind() error\n");
}
//将创建得socket激活设置为监听状态
if(listen(serv_sock, 5) == -1)
{
error_handling("listen() error\n");
}
clnt_addr_size = sizeof(clnt_addr);
//接受客户端socket的连接
clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
if(clnt_sock == -1)
{
error_handling("accept() error\n");
}
//向客户端发送数据
write(clnt_sock, message, sizeof(message));
close(clnt_sock);
close(serv_sock);
return 0;
}
2、TCP客户端
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
void error_handling(char * message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
int main(int argc, char*argv[])
{
int sock;
struct sockaddr_in serv_addr;
char message[30];
int str_len;
if(argc != 3)
{
printf("usage:%s <port>\n", argv[0]);
exit(1);
}
sock = socket(PF_INET, SOCK_STREAM,0);
if(sock == -1)
{
error_handling("socket() error\n");
}
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));
if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)
{
error_handling("connect() error\n");
}
str_len = read(sock, message, sizeof(message)- 1);
if(str_len == -1)
{
error_handling("read() error! \n");
}
printf("message from server :%s\n", message);
close(sock);
return 0;
}
参考:《TCP/IP网络编程》尹圣雨著 金国哲译
|