1、要实现网络编程,首先得了解网络编程的原理。
大部分网络编程底层都是通过TCP/IP或者UDP协议进行通讯,不管是TCP还是UDP通讯,都是通过调用socket实现的。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
Socket通讯分为两部分:服务器端和客户端,服务器端监听客户端的连接,连接上之后,实现数据通讯,流程
2、用C语言调用Socket实现通讯
服务器端示例代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#definePORT1500//端口号
#defineBACKLOG5/*最大监听数*/
intmain(){
intsockfd,new_fd/*socket句柄和建立连接后的句柄*/
structsockaddr_inmy_addr/*本方地址信息结构体,下面有具体的属性赋值*/
structsockaddr_intheir_addr/*对方地址信息*/
intsin_size
sockfd=socket(AF_INET,SOCK_STREAM,0)//建立socket
if(sockfd==-1){
printf(\"socketfailed:%d
这样:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <pthread.h>
#define MAXLINE 100
void *threadsend(void *vargp)
void *threadrecv(void *vargp)
int main()
{
int *clientfdp
clientfdp = (int *)malloc(sizeof(int))
*clientfdp = socket(AF_INET,SOCK_STREAM,0)
struct sockaddr_in serveraddr
struct hostent *hp
bzero((char *)&serveraddr,sizeof(serveraddr))
serveraddr.sin_family = AF_INET
serveraddr.sin_port = htons(15636)
serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1")
if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) <0){
printf("connect error\n")
exit(1)
}
pthread_t tid1,tid2
printf("connected\n")
while(1){
pthread_create(&tid1,NULL,threadsend,clientfdp)
pthread_create(&tid2,NULL,threadrecv,clientfdp)
}
return EXIT_SUCCESS
}
void *threadsend(void * vargp)
{
//pthread_t tid2
int connfd = *((int *)vargp)
int idata
char temp[100]
while(1){
//printf("me: \n ")
fgets(temp,100,stdin)
send(connfd,temp,100,0)
printf(" client send OK\n")
}
printf("client send\n")
return NULL
}
void *threadrecv(void *vargp)
{
char temp[100]
int connfd = *((int *)vargp)
while(1){
int idata = 0
idata = recv(connfd,temp,100,0)
if(idata >0){
printf("server :\n%s\n",temp)
}
}
return NULL
}
扩展资料:注意事项
linux下编译多线程代码时,shell提示找不到 pthread_create函数,原因是 pthread.h不是linux系统默认加载的库文件,应该使用类似如下gcc命令进行编译:
gcc echoserver.c -lpthread -o echoserver
只要注意 -lpthread参数就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)